我已经使用 git 一个多月了。确实我昨天才第一次使用reset,但是软复位对我来说仍然没有多大意义。
我知道我可以使用软重置来编辑提交而无需更改索引或工作目录,就像使用 git commit --amend
一样。
这两个命令真的一样吗( reset --soft
vs commit --amend
)?有什么理由在实际中使用其中之一吗?更重要的是,除了修改提交之外,reset --soft
还有其他用途吗?
最佳答案
git reset
是关于移动 HEAD
, and generally the branch ref 。
问题:工作树和索引怎么样?
当与 --soft
一起使用时, 移动 HEAD
,最常更新分支引用,只有 HEAD
0x2141 0x21413
这与 commit --amend
的不同之处在于:commit --amend
只是关于不移动 HEAD,同时允许重做当前提交)
刚刚发现这个组合的例子:
全部合二为一(八爪鱼,因为 merge 了两个以上的分支)提交 merge 。
Tomas "wereHamster" Carnecky 在他的 "Subtree Octopus merge" article 中解释:
(那是子树 merge 部分)
# Merge projectA with the default strategy:
git merge projectA/master
# Merge projectB with the subtree strategy:
git merge -s subtree projectB/master
在这里,作者使用了 reset --hard
,然后是 read-tree
来恢复前两次 merge 对工作树和索引所做的事情,但这就是 0x25181224131419x251812241314149
如何重做这两个 merge ,它们已经起作用了,即我的工作树和索引很好,但不必记录这两个提交?# Move the HEAD, and just the HEAD, two commits back!
git reset --soft HEAD@{2}
现在,我们可以恢复 Tomas 的解决方案:# Pretend that we just did an octopus merge with three heads:
echo $(git rev-parse projectA/master) > .git/MERGE_HEAD
echo $(git rev-parse projectB/master) >> .git/MERGE_HEAD
# And finally do the commit:
git commit
所以,每次:reset --soft
是答案。
关于git - git reset --soft 的实际用途?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5203535/