2

在提交之前,我看到git diff我做了一个我不想做的改变。有没有办法恢复这个单一的变化?

我想我可以用它git add -p来提交我确实打算进行的更改,然后提交给 checkout master。有没有更好的方法,最好是不需要我承诺的方法?

这适用于 Kubuntu Linux 12.10 上的 Git 1.7.10.4。谢谢!

4

3 回答 3

4

git reset --patch(或git reset -p)做你想做的事。

文档的相关位:

git reset (--patch | -p) [] [--] […]

以交互方式选择索引和(默认为 HEAD)之间的差异。选择的大块反向应用于索引。

这意味着 git reset -p 与 git add -p 相反,即您可以使用它来选择性地重置大块。请参阅 git-add(1) 的“交互模式”部分了解如何操作 --patch 模式。

请注意,git reset(应用于路径)确实匹配git add- 后者暂存文件或块,而前者取消暂存它们,因此git reset支持该--patch选项git add

您可能也有兴趣了解git checkout --patch(或git checkout -p)。

于 2013-06-13T14:36:27.797 回答
2

git checkout也有-p一个选项,它基本上与-pin相同git add,但相反。

做就是了:

git checkout -p <path>

(或者path如果你想没有)

就像git add -p您选择要更改的阶段一样,在这里您可以选择要还原的更改。

于 2013-06-13T14:36:29.800 回答
0

我没有要提交的灵丹妙药,但是当我有这样的用例时,我会选择git gui. 我只是索引我需要的所有更改,然后恢复不需要的更改。

这与 a 相同git add -p,但git gui使操作非常整洁。

于 2013-06-13T14:20:31.100 回答