一些 git 使用经验介绍
经历过两个公司,都是使用 git 作为源码管理工具的。下面我以使用场景进行划分:
一些简单的git概念
拉取远程分支上的信息
git fetch
对应的如果想要添加一个新的远程 Git 仓库,可以:
git remote add REMOTE_GIT_URL.git
当前分支的引用指针,总是指向该分支的最后一次提交
也就是重置文件,通常是使用git checkout -b <SHA>,如果这里不加-b,那么会Detach
阅读约定
$开头的字样标识了命令需要在终端(terminal)中使用。 任何以.开头的文件都是隐藏文件,比如.gitignore文件,如果你在对应系统的文件管理器中没有发现,请先开启显示隐藏文件功能。
初始化 git
1. 生成 SSH Key(常用)
在终端输入命令来生成密钥
$ ssh-keygen -t rsa -C "YOUR_EMAIL"
默认会在用户目录下新建一个.ssh隐藏文件夹,里面以 pub 结尾的文件内容就是公钥,将内容复制到 github 或者是其他源代码管理服务器上即可。之后克隆的时候只要选择 SSH 验证方式就不再需要使用邮箱密码验证了。
如果需要生成多个密钥可以输入命令行
ssh-keygen -t rsa -f SAVE_LOCATION_AND_FILE_NAME -C "YOUR_EMAIL"
然后在.ssh目录下添加config文件,注册内容:
Host hostname_A IdentityFile ~/.ssh/hostname_A_id_rsa User username Port port_id Host hostname_B IdentityFile ~/.ssh/hostname_B_id_rsa User username
2. 设置全局信息
全局 git 信息,也就是一些 git 默认值,使用以下命令来修改用户名和邮箱地址:
$ git config --global user.name 'YOUR_NAME' $ git config --global user.email 'YOUR_EMAIL'
你可以使用$ git config --list来查看当前的全局设置,所有的全局信息都存储在~/.gitconfig文件中
在工程中使用 git
在已经存在的项目中初始化 git(常用)
在工程目录下执行命令
git init
关联远程仓库的方法
git remote add origin GIT_REMOTE_URL.git
默认创建 master 分支
克隆远程仓库(很常用)
git clone GIT_REMOTE_URL.git OPTIONAL_FOLDER_NAME
如果添加文件夹名称,会在当前目录下创建一个文件夹,再在这个文件夹里面创建代码仓库。
忽略一些不想要提交的文件(常用)
在提交之前,有一些文件可能并不打算提交到服务器上,比如 iOS 中的/Pods、Node 中的node_modules等,这时候只需要在工程目录下新建一个.gitignore文件。在文件内容中指定不想要提交的目录或者是文件。
在图形化操作中通常使用 ignore 命令,比如:
你可以在这里github/gitignore下载到一些语言对应的常用 Gitignore 文件,注意使用的时候需要将文件名重命名为.gitignore。否则是无效的。
对 git 进行操作
提交本地修改到服务器(最常用)
基本你99%会用到以下代码提交到 git 上
$ git add .$ git commit -m "YOUR_COMMIT_INFO"$ git push origin <branch>
创建一个分支,或者切换到指定分支
首先查看本地所有分支
$ git branch
如果需要查看本地和远程所有分支的话
$ git branch -a
切换分支
git checkout BRANCH_NAME
如果不想要这个分支了的话
git branch -d BRANCH_NAME
而比较常见的是需要你checkout 远程分支,然后在新分支上写代码,最后push 到远程仓库里面
提交一个 merge request(较常用)
通常在 push 代码到主仓库之后,如果有权限的话可以直接 push remote 来合并代码。但是如果没有权限或者需要在 github\gitlab进行 Merge Request的话。那么请在github\gitlab 上操作。
打 Tag
对于每个发布版本,都需要添加一个 tag,查看 tag的方法是:
git tag
创建 tag 的方法是:
git tag -a [vVERSION_NUMBER] -m [VERSON_DESC]
重置文件操作
对于单个文件,希望撤销修改或者是重置到某次提交,那么就使用到reset方法
git reset HEAD FILE_NAMEgit reset --hard COMMIT_ID
本地还没有提交到远程仓库,想要修改 commit 信息
git commit --amend -m "new commit message"
对已经提交的 commit 进行撤销操作(很常用)
如果想要保留 commit 的修改内容,只不过先放回 staging 里面:
git reset --soft HEAD~
如果完全不想要 commit ,而且也不想要内容了
git reset --hard HEAD~
暂存修改
可以让工作进度先保存起来,需要用到的时候在恢复。
git stash save "STASH_CONTENT"git stash listgit stash apply stash@{...}
对已经push 的提交进行修改
git push origin <branch>
删除分支
//本地git branch -D <your_branch>//远程git push origin --delete <your_branch>
合并多个 commit,让每个 commit 更有意义
可以合并多个 commit 为一个 commit,但是此时的 commit 的信息为最后一个 commit 的描述
git rebase -i HEAD~4
所以通常会修改 commit 描述
git commit --amend -m "YOUR_NEW_COMMIT_MSG"
合并产生冲突,但此时了解哪个版本是对的
git merge a_branch>CONFLICTgit status -s>UU conflict.txtgit checkout --theirs conflict.txt
好用的 Git 终端
Tower Sourcetree gitkraken 系统自带终端
小龙