git 知识汇总补充
Git的分支功能可以支持同时进行多个功能的开发和版本管理。
查看分支情况
- 查看当前分支和本地分支
| 1 | git branch | 
- 查看远程分支
| 1 | git branch -r | 
- 查看所有分支
| 1 | git branch -a | 
创建本地分支
- 直接创建本地分支
| 1 | git branch issue3 | 
- 切换分支
| 1 | git checkout issue3 | 
- 创建并切换本地分支
| 1 | git checkout -b issue3 | 
合并分支
使用如下命令合并分支,如果目前是在issue3分支,首先需要切换到master分支,然后再合并issue3分支到master分支
| 1 | git checkout master | 
除了merge命令外,还有一种命令可以合并分支,那就是rebase,更多内容可以查看:分支的合并
删除分支
| 1 | git branch -d issue3 | 
删除远程分支
| 1 | git push origin --delete add-license-1 | 
注意:删除远程分支不使用git branch -d,而是使用git push origin –delete命令
但是,当远程仓库没有该分支时,或者在本地使用git branch -r能够看到远程仓库名,但远程仓库却已经不存在时,使用上面删除远程分支,会出现如下错误:
| 1 | error: unable to delete 'xxx': remote ref does not exist | 
这时候需要我们更新本地仓库的远程仓库列表信息,命令如下:
| 1 | git fetch --prune | 
之后,再使用命令 git branch -r 查看,就会发现最新的远程仓库列表信息
添加标签
首先运行如下命令,查看commit id,
| 1 | git log | 
运行如下命令添加标签
| 1 | git tag 1.0.0 c584a15bd2 | 
其中,1.0.0为标签,版本号,c584a15bd2为commit id,只要唯一即可。
查看标签
| 1 | git tag -n | 
删除标签
| 1 | git tag -d <tagname> | 
提交本地分支 issue3 到远程分支 dis
| 1 | # issue3 表示本地分支 | 
如果远程分支不存在,则自动创建一个分支
删除远程分支 dis
| 1 | git push -u origin :dis | 
自建 git 托管服务器
这里以 Ubuntu 为例
首先,需要有一个 vps 服务器,假设 IP 地址是 1.14.1.14
其次,在服务器上增加用户和组,比如添加 jinzhongxu 用户
| 1 | adduser jinzhongxu | 
然后,安装git命令
| 1 | sudo apt update && sudo apt install git | 
最后,建立远程仓库
| 1 | git init --bare monkey.git | 
把远程仓库克隆到本地
| 1 | git clone jinzhongxu@1.14.1.14:/home/jinzhongxu/monkey.git | 
远程仓库
当从远程仓库克隆后,git默认远程仓库名为origin,并将远程的master分支与本地的master分支对应。查看远程仓库名称使用如下命令
| 1 | git remote | 
or
| 1 | git remote -v | 
将显示更多信息,不仅有远程仓库名称,还有fetch和push的远程仓库地址。当没有push权限时,将不显示push地址。
多人协作开发提交
当克隆远程仓库到本地,一般是master分支,产品版本分支,该分支是主分支,时刻与远程仓库同步;除此之外,开发人员在本地还会创建dev分支、bug分支和feature分支。其中dev分支是开发分支,团队开发人员开发分支,重大版本迭代时merge到主分支,一般也需要时刻与远程dev分支同步;bug分支是本地修复bug的分支,一般不进行远程同步;feature分支同步取决于团队需要。该小节可参考:多人协作
- leader或首位开发者在本地master分支外使用如下命令创建了dev分支,并提交到远程origin仓库 - 1 
 2
 3
 4
 5- 在本地创建dev分支,并切换到dev分支,进行开发 
 git checkout -b dev
 推送本地dev分支到远程仓库origin,并同时在远程仓库origin创建dev分支
 git push origin dev
- 第二位开发人员首先克隆远程开发仓库到本地,然后在本地增加远程origin/dev分支到本地dev分支 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24- 克隆远程origin仓库到本地机器 
 git clone jinzhongxu@1.14.1.14:/home/jinzhongxu/monkey.git
 查看分支情况,特别是远程,发现远程仓库origin除了有master分支,还有分支origin/dev
 git branch -a
 //* master
 // remotes/origin/HEAD -> origin/master
 // remotes/origin/dev
 // remotes/origin/master
 将远程仓库origin的dev分支增加到本地,并切换到本地dev分支
 git checkout -b dev origin/dev
 查看本地分支信息
 git branch
 //* dev
 // master
 该开发人员进行了本地开发,并在dev分支增加部分代码,然后提交到远程仓库origin的dev分支
 git status
 git add .
 git commit -m "repair bug"
 git status
 git push origin dev:dev
- 第三位开发人员也同样和第二位开发人员一样,下载了远程仓库origin的master分支和dev分支,并同时进行开发 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52- 克隆远程origin仓库到本地机器 
 git clone jinzhongxu@1.14.1.14:/home/jinzhongxu/monkey.git
 查看分支情况,特别是远程,发现远程仓库origin除了有master分支,还有分支origin/dev
 git branch -a
 //* master
 // remotes/origin/HEAD -> origin/master
 // remotes/origin/dev
 // remotes/origin/master
 将远程仓库origin的dev分支增加到本地,并切换到本地dev分支
 git checkout -b dev origin/dev
 查看本地分支信息
 git branch
 //* dev
 // master
 该开发人员进行了本地开发,并在dev分支增加部分代码,然后提交到远程仓库origin的dev分支
 git status
 git add .
 git commit -m "repair bug"
 git status
 但是,使用如下命令在提交时出现问题
 git push origin dev:dev
 // To 1.14.1.14:/home/jinzhongxu/monkey.git
 // ! [rejected] dev -> dev (fetch first)
 // error: failed to push some refs to 'jinzhongxu@1.14.1.14:/home/jinzhongxu/monkey.git'
 // hint: Updates were rejected because the remote contains work that you do
 // hint: not have locally. This is usually caused by another repository pushing
 // hint: to the same ref. You may want to first integrate the remote changes
 // hint: (e.g., 'git pull ...') before pushing again.
 // hint: See the 'Note about fast-forwards' in 'git push --help' for details.
 上面的错误提示很明白,那就是团队中已经有人提交的最新更新到远程dev分支,需要先git pull,然后再git push,使用如下命令解决
 git pull # 如果失败,可能的原因是没有指定本地dev分支与远程origin/dev分支的链接,可使用右边命令设置dev和origin/dev的链接:git branch --set-upstream-to=origin/dev dev
 成功后,出现如下提示,就是需要手动修改冲突,然后,再git push
 // remote: Counting objects: 5, done.
 // remote: Compressing objects: 100% (3/3), done.
 // remote: Total 3 (delta 1), reused 0 (delta 0)
 // Unpacking objects: 100% (3/3), done.
 // From 1.14.1.14:/home/jinzhongxu/monkey
 // 4461cc8..7056c16 dev -> origin/dev
 // Auto-merging main.py
 // CONFLICT (content): Merge conflict in main.py
 // Automatic merge failed; fix conflicts and then commit the result.
 git status
 git add main.py
 git commit -m "repair bugs for xlabel and ylabel"
 git push origin dev
- 前面三个过程,特别是2和3,是公司开发时常遇到,并且经常这样的迭代进行。特别是3,我们要经常使用,要熟练掌握。 
更改远程仓库的 URL
当远程仓库 IP 地址更改、SSH 和 HTTPS 切换等其他导致远程仓库的 URL 地址发生改变时,需要切换地址,才能够正确提交本地修改的代码等内容上传到远程仓库。
更改远程仓库的 URL 需要使用命令:
| 1 | git remote set-url | 
git remote set-url 命令使用两个参数:
- 现有远程仓库的名称。 例如, - 源仓库或- 上游仓库是两种常见选择。
- 远程仓库的新 URL。 例如: - 如果您要更新为使用 HTTPS,您的 URL 可能如下所示: - 1 - https://github.com/USERNAME/REPOSITORY.git 
- 如果您要更新为使用 SSH,您的 URL 可能如下所示: - 1 - git@github.com:USERNAME/REPOSITORY.git 
 
将远程 URL 从 SSH 切换到 HTTPS
- 打开 Terminal(终端)。 
- 将当前工作目录更改为您的本地仓库。 
- 列出现有远程仓库以获取要更改的远程仓库的名称。 - 1 
 2
 3- git remote -v 
 origin git@github.com:USERNAME/REPOSITORY.git (fetch)
 origin git@github.com:USERNAME/REPOSITORY.git (push)
- 使用 - 1 - git remote set-url - 命令将远程的 URL 从 SSH 更改为 HTTPS。 - 1 - git remote set-url origin https://github.com/USERNAME/REPOSITORY.git 
- 验证远程 URL 是否已更改。 - 1 
 2
 3
 4- git remote -v 
 Verify new remote URL
 origin https://github.com/USERNAME/REPOSITORY.git (fetch)
 origin https://github.com/USERNAME/REPOSITORY.git (push)
下次对远程仓库执行 git fetch、git pull 或 git push 操作时,您需要提供 GitHub 用户名和密码。 When Git prompts you for your password, enter your personal access token (PAT) instead. Password-based authentication for Git is deprecated, and using a PAT is more secure. For more information, see “Creating a personal access token.”
You can use a credential helper so Git will remember your GitHub username and personal access token every time it talks to GitHub.
将远程 URL 从 HTTPS 切换到 SSH
- 打开 Terminal(终端)。 
- 将当前工作目录更改为您的本地仓库。 
- 列出现有远程仓库以获取要更改的远程仓库的名称。 - 1 
 2
 3- git remote -v 
 origin https://github.com/USERNAME/REPOSITORY.git (fetch)
 origin https://github.com/USERNAME/REPOSITORY.git (push)
- 使用 - 1 - git remote set-url - 命令将远程的 URL 从 HTTPS 更改为 SSH。 - 1 - git remote set-url origin git@github.com:USERNAME/REPOSITORY.git 
- 验证远程 URL 是否已更改。 - 1 
 2
 3
 4- git remote -v 
 Verify new remote URL
 origin git@github.com:USERNAME/REPOSITORY.git (fetch)
 origin git@github.com:USERNAME/REPOSITORY.git (push)
提交时忽略某些文件或文件夹
在仓库主目录下,编写
| 1 | vim .gitignore | 
添加忽略的(或包含的)文件、文件夹。这里以 hexo 部署博客为例:
| 1 | .DS_Store | 
如果出现 !db.json 即表示提交时包含 db.json.








