/ 写在前面 – 我热爱技术、热爱开源。我也相信开源能使技术变得更好、共享能使知识传播得更远。但是开源并不意味着某些商业机构/个人可以为了自身的利益而一味地索取,甚至直接剽窃大家曾为之辛勤付出的知识成果,所以本文未经允许,不得转载,谢谢。/
创建与合并分支
参考文档:创建与合并分支 - 廖雪峰的官方网站
Git鼓励大量使用分支,这样更安全。
关于分支的一些命令:(有多种命令的推荐前者)
- 查看分支:
git branch
- 创建分支:
git branch <name>
- 切换分支:
git switch <name>
或者git checkout <name>
- 创建➕切换分支:
git switch -c <name>
或者git checkout -b <name>
- 合并某分支到当前分支:
git merge <name>
- 删除分支:
git branch -d <name>
合并分支
Git较懒,倾向于使用 --ff
模式,即Fast Forward模式,但在这种模式下,删除分支后,会丢掉分支信息。
我们可以通过参数 --no-ff
来强制禁用Fast Forward模式,这样Git就会在merge时生成一个新的commit,我们从分支历史上就可以看出分支信息。
bug分支
参考文档:Bug分支 - 廖雪峰的官方网站
Git还提供了一个 stash
功能,可以使用 git stash
把当前工作现场“储藏”起来,等以后恢复现场后继续工作。
用 git stash list
命令可以查看刚刚保存的工作现场。
恢复工作现场有2种办法:
- 一是用
git stash apply
恢复,但是恢复后,stash
内容并不删除,你需要用git stash drop
来删除; - 另一种方式是用
git stash pop
,恢复的同时把stash内容也删了。
在 master
分支上修复的bug,想要合并到当前 dev
分支,可以用 git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。这样会产生一次新的 commit
。但是,使用 cherry-pick
一定要注意:先 cherry-pick
再 git stash pop
,否则会报错,前提是 cherry-pick
改动的文件与 stash
的文件不冲突。
注意事项 - 我觉得你们说的有点乱,会带坏新手 我给你们做个总结:
先说几个名词 未被追踪的文件:指的是新建的文件或文件夹且还没加入到暂存区(新建的还没有被git add 过得) 未加入到暂存区的文件:指的是已经被追踪过,但是没有加入到暂存区(已经执行过git add/commit的但是这次修改后还没有git add) 举例: readme.md 已经被git add/git commit过,但是呢 我这次只是修改了,而且没有修改完,不能commit test 新建的文件夹,没有被git add/git commit过 有个急事需要处理,这时候我需要切换分支,去处理紧急任务,比如文中的举例去修改bug, 正确的步骤: git add test(让git去追踪这个新文件) git stash保留现场 如果我不执行这两个命令,那么我在修改BUG完成之后 git status,就会发现readme.md 没有添加到暂存区,同时又多了个test文件,但是自己的readme.md没有完成,万万不可以提交,这样导致bug的修改代码也提交不了。所以你需要 git stash,这样你在提交修改bug代码的时候 ,就不会看见readme.md 和 test。可以安心提交修改bug的代码。
天哪! 幸好我一上来看到的是你这条评论,不然不知道会被其他评论中各种不充分的测试带偏到哪里去! 关于stash到底用不用先add到stage总结一句话就是”必须被add过“注意过字是重点
楼主说的好,我总结一下楼主的总结(滑稽 在
git stash
之前一定要用git status
确认没有Untracked files
否则,也没啥,多stash
几次而已…
bug分支这个话题还是有点复杂,自己暂时也还没怎么搞清楚……
丢弃分支
如果要丢弃一个还未合并的分支,可以通过 git branch -D <name>
强行删除。