Git: reset --hard 对未来合并的影响
Git: Effect of reset --hard on future merging
我们不小心将 sha XXX 提交到分支 A 而不是 B。
A: VVV-WWW-XXX
B: VVV-WWW
所以我们将按照 guidance on SO 将提交从 A 移动到 B:
git checkout B
git merge A
git checkout A
git reset --hard HEAD~1
git push --force
这将使我们达到:
A: VVV-WWW
B: VVV-WWW-XXX
如果我们然后在分支 A 上提交 YYY 给我们:
A: VVV-WWW-YYY
B: VVV-WWW-XXX
并将其合并到 B 中是否会干净地将 YYY 合并到 B 而 不会 恢复 B 上的 XXX 因为 XXX 之前是 reset --hard
在 A 上?合并后我们想要的是:
A: VVV-WWW-YYY
B: VVV-WWW-XXX-YYY
我正在努力应对 reset --hard
对合并行为的影响。我认为重置会清除提交的所有历史记录,因此合并会在不尝试从 B 中删除 XXX 的情况下正常工作。
合并的结果将是
(A)
VVV --- WWW --- YYY
\ \ (B)
--- XXX --- ZZZ
其中 ZZZ 是父级为 XXX 和 YYY 的合并提交。括号中的单个字母代表 refs 或分支名称,它们只是历史图中沿途的路标。
使用 git lola
渲染(git log --graph --decorate --pretty=oneline --abbrev-commit --all
的别名)
* 78d2930 (HEAD -> B) ZZZ
|\
| * 549c09e (A) YYY
* | f585976 XXX
|/
* 537d898 WWW
* 875611c VVV
我使用上面的提交消息来关联你问题中的历史记录。您的 SHA-1 对象名称将与上述名称不同。
别想太多了。请记住 git 存储树状态的快照,历史谱系来自提交对象。使用利器 git reset --hard
删除历史,就好像它从未发生过一样,没有留下任何痕迹。
就像任何锋利的工具一样,git reset --hard
如果您不小心,可能会割伤您。想一想 rm -rf
.
reset
只是将 HEAD/branch 指针移动到另一个提交。它不会对存储库或任何未来的操作产生任何影响。
你是正确的,无论你是否提交了重置,未来的合并将完全相同。
我们不小心将 sha XXX 提交到分支 A 而不是 B。
A: VVV-WWW-XXX
B: VVV-WWW
所以我们将按照 guidance on SO 将提交从 A 移动到 B:
git checkout B
git merge A
git checkout A
git reset --hard HEAD~1
git push --force
这将使我们达到:
A: VVV-WWW
B: VVV-WWW-XXX
如果我们然后在分支 A 上提交 YYY 给我们:
A: VVV-WWW-YYY
B: VVV-WWW-XXX
并将其合并到 B 中是否会干净地将 YYY 合并到 B 而 不会 恢复 B 上的 XXX 因为 XXX 之前是 reset --hard
在 A 上?合并后我们想要的是:
A: VVV-WWW-YYY
B: VVV-WWW-XXX-YYY
我正在努力应对 reset --hard
对合并行为的影响。我认为重置会清除提交的所有历史记录,因此合并会在不尝试从 B 中删除 XXX 的情况下正常工作。
合并的结果将是
(A)
VVV --- WWW --- YYY
\ \ (B)
--- XXX --- ZZZ
其中 ZZZ 是父级为 XXX 和 YYY 的合并提交。括号中的单个字母代表 refs 或分支名称,它们只是历史图中沿途的路标。
使用 git lola
渲染(git log --graph --decorate --pretty=oneline --abbrev-commit --all
的别名)
* 78d2930 (HEAD -> B) ZZZ
|\
| * 549c09e (A) YYY
* | f585976 XXX
|/
* 537d898 WWW
* 875611c VVV
我使用上面的提交消息来关联你问题中的历史记录。您的 SHA-1 对象名称将与上述名称不同。
别想太多了。请记住 git 存储树状态的快照,历史谱系来自提交对象。使用利器 git reset --hard
删除历史,就好像它从未发生过一样,没有留下任何痕迹。
就像任何锋利的工具一样,git reset --hard
如果您不小心,可能会割伤您。想一想 rm -rf
.
reset
只是将 HEAD/branch 指针移动到另一个提交。它不会对存储库或任何未来的操作产生任何影响。
你是正确的,无论你是否提交了重置,未来的合并将完全相同。