如何恢复提交并将更改放回到舞台

问题描述 投票:0回答:4

如何恢复提交,但将更改放在舞台上,以便我可以编辑提交,直到它是我想要的。

以前我很熟悉 TFS,其中恢复正是这样做的,但在 GIT 中

git revert
似乎会自动签入未完成的提交,因此没有机会从变更集中保留某些内容。

git revert changeset
4个回答
13
投票

试试这个

git reset HEAD^

HEAD^ 表示上一次提交。


5
投票
(make sure that you have a clean working directory)
git revert <commit>
(accept commit message)
git reset HEAD^

这将使您拥有本地更改,如果您接受所有内容,则可以恢复提交,但允许您只选择几行来恢复。如果您想将更改放入暂存区域,您也可以更改为

git reset HEAD^ --soft

我同意另一个答案,如果您正在处理其他人的历史记录,那么恢复完整提交可能会更好。当我变基并修复我自己的更改时,我经常使用这个

revert + reset


4
投票

可以使用

git revert -n
。我建议你不要。单独提交以进行您想要的更改。

原因很简单。提交快照,但它代表更改。为了从快照中查找更改,Git 会将提交与其直接父级进行比较。

也就是说,如果文件 A 之前有 10 行,现在有 11 行,则将文件 A 的旧副本与文件 A 的新副本进行比较将(可能)显示有人添加了一行。 diff 会显示:要将旧提交更改为新提交,请将这一行添加到文件 A。如果文件 B 之前有 20 行,现在有 19 行,则 diff 会显示: 要将旧提交更改为新提交,请从文件 B 中删除这一行

一个简单的提交

git revert
,在显示时将显示相同的更改,但向后:从文件 A 中删除这一行,并将这一行添加到文件 B。

如果您的意思(并将在此第第三个提交中提交)只是将一行添加到文件A,那么现在您有一个正确的单个提交,当显示时,会显示添加此内容一行写入文件 A

如果您改为进行非提交还原,然后将行放回去,则必须将两个单独的提交(错误的提交和正确的还原)加在一起,以查看实际意图。这并没有“错误”,但这意味着后来的任何人,为了了解发生了什么以及在类似情况下他们可能需要做什么,都必须更加努力。 比较这些说明:

“做 X;等等,不,不要做 X。做 Y。”
  1. “执行 X。然后在撤消 X 的同时执行 Z。”
  2. 您更希望看到哪一个未来?

(请注意,您可以通过以下方式构造提交

Y


git cherry-pick -n X

其中 X 是您恢复的那个。这样,您可以获得所有更改,但可以开始撤消它们。

另请注意,

git revert -n

git cherry-pick -n
将所有内容放入暂存区域,也就是说,它们对所有更新的文件执行
git add
。这实际上没有问题,但如果您不喜欢它,可以运行
git reset
取消暂存。)
    


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.