Git 命令 stash cherry-pick reset rebase

Git 命令 stash cherry-pick reset rebase

I.

前提:git reflog命令

git stash show(show the file changed)

git stash list(show the stash stack)

stash的应用场景:本地分支正在开发,改了一些文件但是还未提交,leader要让你快点去查看线上代码的另外一个问题,要么保存一份,pull最新代码,后面再复制回来,但是操作比较啰嗦;这个时候就可以用stash。执行后,本地文件看到的都是最近一次提交后的样子,不包括stash的提交。stash要注意的是出栈顺序,解决冲突以及清理栈。

1.vi README.md,增加一行

2.git stash

 

3. git stash show

 

4. 重复vi README.md和git stash;

5. git stash pop && git commit -a -m "pop1 commit"(两次stash的话第一次pop后要重新pop)

6. git stash pop

其他

1.指定栈名

git stash save "work in progress for foo feature" 当你多次使用"git stash"命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑。建议使用

git stash save "xxx log message"(建议从一开始就这么做)

2.stash默认是先进后出的栈,要指定出栈的记录:

你只需要将找到对应的版本号,例如使用"git stash apply stash@{1}"就可以将你指定版本号为stash@{1}的工作取出来,

如果你不需要stash了,用git stash clear就可以了

3. 分支的问题

如果git checkout branch1,在不同分支下,分别进行了stash和stash pop,那么它们会造成分支的冲突。个人实践的结果,要自己解决冲突,最后只stash pop本分支的。

II.

git cherry-pick 使用场景:两个大的开发分支A,B,B要合并到A。类比svn中的分支合并。cherry-pick是代码的合并。

用法

前提

如果我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式:

查看 dev 有,而 master 中没有的: git log dev ^master

同理查看 master 中有,而 dev 中没有的内容:

git log master ^dev

1. git cherry-pick <commit-id>

2. 多个提交copy:git cherry-pick <first-commit>-<last-commit>

master 分支:

到branch1分支

git checkout branch1 && git cherry-pick 8f5f..9e3838,左开右闭区间

III.

git reset使用场景:

前提:需要知道暂存区,工作区和本地仓库

    

 

有三个操作,git reset –hard是危险操作,会把指定commit后面的改动和未提交改动都删除;git reset(即mixed)会保留未提交改动,并把reset 的commit合并成红色的结果;git reset --soft 会把History转为stage,并且保留work directory的改动。

    git reset –hard xxxid && git status

    结果是工作区目录是指定xxxid的内容,提交commit历史被删除

    git reset –soft && git status

git reset(--mixed) xxxid && git status

IV.

    git revert使用场景:

    跟git reset相似,revert -- git revert 也是撤销命令,区别在于reset是指向原地或者向前移动指针,git revert是创建一个commit来覆盖当前的commit,指针向后移动。一般在代码出现问题要回滚,而且可以接受历史中记录回滚错误,不打算修改历史的时候做的。

V.

    git rebase使用场景:多人开发,而且本地有拉新分支的时候(一般都要)。跟merge相似但是场景不一样。

    注意:不要在公共分支使用rebase。否则其他人pull的时候会得到被污染的主分支历史记录。

本地和远端对应同一条分支,优先使用rebase,而不是merge。

git rebase -i dev 可以将dev分支合并到当前分支

其他:

squash

References:

git stash的详细讲解 https://www.jianshu.com/p/14afc9916dcb

git rebase 还是 merge的使用场景最通俗的解释 https://www.jianshu.com/p/4079284dd970

git reset --hard --soft 与 git revert 的作用https://www.jianshu.com/p/952d83fc5bc8

posted @ 2019-08-14 17:15  stackupdown  阅读(376)  评论(0编辑  收藏  举报