git merge 与 rebase, 还有stash概念
来源 https://git-scm.com/book/en/v2/Git-Branching-Rebasing
https://www.jianshu.com/p/c17472d704a0
在git中,有两种方法把修改从一个分支整合到另一个分支。
假设现在分支是这样的,merge与rebase的区别:
merge
$ git checkout master
$ git merge experiment
切换到master分支,把experiment的修改合并到master分支
rebase
$ git checkout experiment
$ git rebase master
切换到experiment分支,把master分支的修改插到experiment修改之前
应用场景
merge适合在分支开发完毕后,合并到主版本?
rebase适合在分支开发时,把master的修改同步到分支? 但rebase的话,不能真实看到分支的修改过程,比如分支的a修改在rebase后会变为a’修改,修改日期会改变
注意点
- rebase 操作会丢弃当前分支已提交的 commit,故不要在已经 push 到远程,和其他人正在协作开发的分支上执行 rebase 操作
- 与远程仓库同步时,使用 pull 命令默认进行了 git fetch + git merge --no-ff 两个操作,可以通过加上 --rebase 命令将 fetch 后的 merge 操作改为 rebase 操作。或者仅仅fetch
- 当有修改未 commit 时,不能进行 rebase 操作,此时可以考虑先用 git stash 命令暂存
stash
切换分支需要提交当前分支所有变动,但可能开发还没完成,不想提交,这时候可以用stash。
git stash
可以用以下指令看你stash了什么
git stash list
恢复上次stash的内容可以用apply
git stash apply
如果要恢复某次,加上在list看到的编号
git stash apply stash@{1}