前言
最流行的工作流来啦:Feature Branching,还有很多应该注意的用法。
核心
任何新的功能(feature)或 bug 修复全都新建一个 branch 来写;
branch 写完后,合并到 master,然后删掉这个 branch。
有了前面的基础,这两句话还是很好理解的。
删除远程分支使用的命令:
git push origin -d another
一般我们开发好another分支并review(一般会创建远程another分支便于共享代码)之后,先在本地pull一下远程仓库,然后再merge。
除此之外,github之类的服务还会有pull request之类的服务,便于多人之间的交流和合并删除分支的便利,但这部分并不是git的内容。
其他的也没什么了,这种工作流之所以流行与其简单的核心架构也有很大关系。
关于log
git log还有一些可选参数
❯ git log -p
可以查看具体改动
❯ git log --stat
可以查看简要改动
git show
可以查看当前一条commit
除此之外还有如git diff等查看未提交改动之类的方法。
rebase
我们知道branch+merge的操作到最后肯定会生成一个环,这个环的起点是分叉点,终点是合并点。我们也可以使用branch+rebase+merge的操作打破这个环。
reset
提交错了怎么办?
可以放弃:
git reset --hard HEAD^
这样就可以放弃最新的提交
revert
推错了怎么办?
可以使用revert来把之前的commit取反:
git revert HEAD^ +''
‘’中的内容即HEAD的编号,想撤销哪次commit就填上哪个的编号。他会提供一次新的提交,而该次提交与想撤销的提交是取反的,抵消下来,相当于那次提交被撤销掉了。
有用的stash
如果我们签了一个新的分支,开发了一半,这时忽然有紧急事情要我们去做,可能来不及做个新的commit,这时我们可以使用stash暂存开发进度。
git stash
git stash pop
这里有个小例子:
❯ ls
目录: C:\Users\starinsun\Documents\test\git_work\another
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/2/7 11:44 1714 .gitignore
------ 2020/2/7 12:13 17 another.md
-a---- 2020/2/7 16:53 16 branck_another.md
-a---- 2020/2/7 16:52 21 master_branch.md
这时我们删除一个文件:
❯ rm another.md
starinsun@ASEN ~\Documents\test\git_work\another master ↑2 ~0 -1 ! [18:16] ❯ ls
目录: C:\Users\starinsun\Documents\test\git_work\another
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/2/7 11:44 1714 .gitignore
-a---- 2020/2/7 16:53 16 branck_another.md
-a---- 2020/2/7 16:52 21 master_branch.md
-a---- 2020/2/7 12:00 6 this.md
然后我们使用stash暂存更改:
❯ git stash
Saved working directory and index state WIP on master: ec041b0 Merge branch 'another'
starinsun@ASEN ~\Documents\test\git_work\another master ↑2 [18:16] ❯ ls
目录: C:\Users\starinsun\Documents\test\git_work\another
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/2/7 11:44 1714 .gitignore
-a---- 2020/2/7 18:16 20 another.md
-a---- 2020/2/7 16:53 16 branck_another.md
-a---- 2020/2/7 16:52 21 master_branch.md
-a---- 2020/2/7 12:00 6 this.md
可以看到原本消失的another.md又回来了,这时如果我们使用:
❯ git stash pop
Removing another.md
On branch master
可以看到又回到了暂存前的状态。
删除的分支也可以找回
方法很简单:
git reflog
git checkout c08de9a
git checkout -b branch1