这是我的要求:
我有a -> b -> c (HEAD)
。
我正在添加一个新的提交d
。现在,它变为a -> b -> c -> d(HEAD)
。
现在,我想恢复为c
(即撤消d
中所做的所有更改)并进行其他更改并形成e
。树应该看起来像a -> b-> c -> d -> e(HEAD)
。注意:我不能丢失d
历史记录。我必须将其还原并向e
添加新的更改。
更新
我可以用一个更好的例子来解释。假设我有a->b->c(HEAD)
,这里c
是主提交或主提交。 我正在尝试使用脚本进行自动化。
初始步骤:我从git checkout <SHA1 of c>
开始,树看起来像:a->b->c(DETACHED HEAD)
我的真实查询从此处开始:
d
。所以树应该看起来像:a->b->c->d(HEAD)
e
。所以树应该看起来像:a->b->c->d->e(HEAD)
注意:此处e
=还原提交d
+对c
的新更改。我不能盲目地使用git revert HEAD
,因为c
被认为是主要提交。我以为我可以使用git stash
和git stash pop
删除旧更改并插入新更改。我可以做git checkout stash
之类的事情吗?
简而言之:我正在尝试模糊测试提交c
大约50次(即)提交并恢复50次
答案 0 :(得分:3)
git revert
命令正好按照您的描述进行操作 - 它会在当前分支的顶部创建一个新的更改,以反转某些预先更改。在你的情况下
git revert HEAD
将在e
之上创建一个新的更改(HEAD
),以反转HEAD
(d
)
答案 1 :(得分:0)
怎么样?
首次提交对d
的更改$ git commit -d "Your message"
然后在c上创建新分支e并结帐
之类的东西 $ git checkout -b e c
答案 2 :(得分:0)
如果您想对还原提交进行其他更改,use -n
flag in revert command:
git revert -n HEAD
这将恢复HEAD中的更改但不会创建提交,因此您可以在完成后进行其他更改并提交。