【发布时间】:2014-02-13 05:36:25
【问题描述】:
我的提交历史如下:
A - B - C - D - E
\ /
X - Y
分支ABCDE 是master,分支XY 是某个其他分支(比如test),D 是一个合并提交。 HEAD 现在位于 E。我需要将我的工作目录返回到A 的状态,假设不 使用git reset --hard <SHA1(A)>,只使用git revert。据我所知,在这种情况下,可以通过两种方式完成:
第一种方式:
git revert --no-commit <SHA1(E)>
git revert -m 1 --no-commit <SHA1(D)>
git revert --no-commit <SHA1(C)>
git revert --no-commit <SHA1(B)>
git commit -m "Reverted to state A"
第二种方式:
git revert --no-commit <SHA1(E)>
git revert -m 2 --no-commit <SHA1(D)>
git revert --no-commit <SHA1(Y)>
git revert --no-commit <SHA1(X)>
git revert --no-commit <SHA1(B)>
git commit -m "Reverted to state A"
一个绊脚石是git revert -m。在这个例子中,我假设1 允许沿着分支master 和2 沿着分支test 继续恢复链。
问题是:我怎么知道哪个数字代表哪个分支?
【问题讨论】:
-
你为什么不直接
git checkout A?如果需要切换分支指向 A,git checkout A; git branch -D NAME; git branch NAME; git checkout NAME。您仍然可以结帐任何 ABCDEX 或 Y。 -
实际上我正在使用远程仓库,在这种情况下,我只能恢复,不能重置和结帐。
-
我会在 A 和 HEAD 之间生成一个补丁,然后使用
patch -R反向应用它。 -
啊。所以你想要一个新的提交来“回到过去”,对吧?
-
@Kaz 正是我要提出的建议!
标签: git git-merge git-revert