git - 为什么这里使用 git reset 而不是 git merge?

标签 git

在一本关于 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/

相关文章:

git子树添加: change prefix preserving local commits

git - 如何获取远程存储库中提交哈希的 git 标签?

svn - git-svn 无法提交,即使在干净 checkout 后也是如此

git - 不能 git diff。文件存在于两个分支中,但得到 "fatal: Path ' .. .' exists on disk, but not in ' master'”?

git - 什么样的目录结构对 DVCS(例如 git)有意义?

git - 将主控转发到标签

git - 从 Github 存储库更新 GitLab 存储库

git - 如何强制将重置推送到远程存储库?

git - gerrit - git(pull vs checkout vs cherrypick)这是为了什么?

git - 如果我将暂存或提交的文件放入 .gitignore 会怎样?