Git 使用教程
来源于廖雪峰老师的 Git 教程
链接:廖雪峰 - Git 教程
一、分支管理
1、创建与合并分支
-
git checkout命令加上-b参数表示创建并切换git checkout -b dev // 创建并合并分支
git checkout -b dev -> git branch dev + git checkout dev -
git branch命令会列出所有分支,当前分支前面会标一个 * 号git branch
-
git commit用于提交分支git commit -m "需要提交的分支"
-
git merge用于合并指定分支到当前分支git merge "需要合并的分支"
-
git branch -d用于删除指定分支git branch -d "需要删除的分支"
合并后,就可以将分支进行删除
小结
| 命令 | 解释 |
|---|---|
git branch |
查看分支 |
git branch <name> |
创建分支 |
git checkout <name> 或者 git switch <name> |
切换分支 |
git checkout -b <name> 或者 git switch -c <name> |
创建+切换分支 |
git merge <name> |
合并某分支到当前分支 |
git branch -d <name> |
删除分支 |
2、解决冲突
-
git status用于查看状态git status
当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把 Git 合并失败的文件手动编辑为我们希望的内容,再提交。
-
用
git log --graph命令可以看到分支合并图。 -
git stash用于分支管理策略git stash // 把当前工作现场"储藏"起来
git stash pop
git stash list
git cherry-pick 4c805e2
小结
- 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
- 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
- 在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改"复制"到当前分支,避免重复劳动。
3、多人协作
git remote
git remote -v // 更详细
git push origin master
git pull
小结
● 查看远程库信息,使用git remote -v;
● 本地新建的分支如果不推送到远程,对其他人就是不可见的;
● 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
● 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
● 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
● 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
4、Rebase
● rebase操作可以把本地未push的分叉提交历史整理成直线;
● rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
二、标签
1、创建标签
首先,切换到需要打标签的分支上。
git tag v1.0
git tag // 查看标签
git tag v0.9 f52c633 // 给指定的提交打标签
git show v0.9 // 查看标签信息
git tag -a v0.1 -m "balabal..." 1094adb // 创建带有说明的标签
标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
2、操作标签
如果标签打错了,可以进行删除
git tag -d v0.1
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令git push origin
或者,一次性推送全部尚未推送到远程的本地标签:git push origin --tags
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git push origin --tags -> git push origin :refs/tags/v0.9
小结
● 命令git push origin 可以推送一个本地标签;
● 命令git push origin --tags可以推送全部未推送过的本地标签;
● 命令git tag -d 可以删除一个本地标签;
● 命令git push origin :refs/tags/可以删除一个远程标签。