我有一个名为devbranch
的分支和一个master
的分支。如果我从devbranch
到master
分支中选择了一个提交XYZ
,然后从devbranch
恢复或重置XYZ
提交,那么恢复或重置会影响、恢复或停止从master
分支提交XYZ
吗?
快速回顾一些关键概念:
- git存储库由提交组成
- 每个提交都包含所有文件的快照,以及一些元数据,其中包括指向父提交的零个或多个(但通常是一个或两个(链接
- 通过从已知的提交到其父级的反向来检查历史
- 分支只是一个指向提交的指针,为您提供了一个可以向后查看历史的地方
现在有一些细节:
git cherry-pick
查看提交,将其与其父项进行比较,然后在其他地方复制相同的更改作为新提交。新提交与原始提交没有任何关联git revert
做了同样的事情;相反地":它将提交与其父级进行比较,然后应用与该更改相对的。同样,它创建了一个全新的提交,与原始提交无关
所以,回到你的问题:
- 您有两个独立的提交-原始提交,"XYZ";你在";devbranch";;以及当您选择"em"时创建的不同的提交;主">
- 当您运行
git revert
时,您将创建第三个提交,撤消对";XYZ">
作为一种替代方案,您可以"重写历史";,这实际上意味着创造一个新的历史(我喜欢把它想象成进入一个平行宇宙(。例如,您可以使用";交互式重新基准";重播所有提交,除了您想要";从历史中抹去";。
还原提交只会在当前分支上创建相反的提交。它不会影响其他分支。您还需要在master分支上恢复cherry-pick-commit,或者您可以从dev分支中恢复cherry pick-commit。结果是一样的,但这取决于你希望如何记录你的历史。