在一本关于 Git 的教科书中,我发现这个命令提示符解释了开发人员通常如何应对紧急情况,在这种情况下,他必须暂时搁置当前的开发线以修复错误。我对它的结局感到困惑:
$ cd the-git-project
# edit a lot, in the middle of something
# High-Priority Work-flow Interrupt!
# Must drop everything and do Something Else now!
# Create new branch on which current state is stored.
$ git checkout -b saved_state
$ git commit -a -m "Saved state"
# Back to previous branch for immediate update.
$ git checkout master
# edit emergency fix
$ git commit -a -m "Fix something."
# Recover saved state on top of working directory.
$ git checkout saved_state
$ git reset --soft HEAD^
# ... resume working where we left off above ...
考虑最后两个(即 git reset --soft HEAD^
后跟 git checkout saved_state
)。
开发者到底为什么要通过这种方式回到原来的工作状态?将 saved_state
merge 到他的 master 分支不是更好的做法吗?
虽然我的第一个问题是,在这里执行 git reset --soft HEAD^
有什么意义?假设开发人员在他的提交图中的这个位置(即,在这两个分支之间的 merge 基础上,在他的“保存状态”分支中)根据自己的喜好进行更改,然后他将如何将这些更改与他的 merge 最新的主分支?
最佳答案
1) 他不想 merge ,因为分支 saved_state
上的工作只完成了一半并且可能不稳定,所以没有办法将它 merge 回 master
2) git reset --soft HEAD^
: 回到原来的状态:
--soft
只重置舞台HEAD^
在这种情况下表示HEAD
之前的修订
因此他的工作目录与开始时相同,他的状态将突出显示他在“猴子提交”时所做的更改
但是,他可以让 git stash save -u
... 更简单、更干净(恕我直言)。
关于git - 为什么这里使用 git reset 而不是 git merge?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32147940/