2

我最近做了一个包含十个文件的提交。其中一个文件不应该被提交:它有我的本地测试更改,对其他人不起作用。

我想从以前的提交中检查该文件,然后将其重新提交为原始文件,然后在本地重新应用我的更改。

git revert听起来不错,但它似乎是针对整个提交,而不是提交中的一个文件。有没有一种好方法可以解决这个问题,同时将 git chatter/logs 保持在最低限度?也许修改以前的提交?

如果有帮助的话,这些都还没有被推动。

4

2 回答 2

4

git revert听起来不错,但它似乎是针对整个提交,而不是提交中的一个文件。

没有轻松的方式来更改提交。如果您想更改现有提交中的哪怕一点点,您必须创建一个与原始提交类似的新提交(带有新的 SHA)。

有没有一种好方法可以解决这个问题,同时将 git chatter/logs 保持在最低限度?(也许修改之前的提交?)

如果有问题的提交不是分支上的最后一个,对git commit --amend你没有多大帮助;看到这个解释。您可以使用git revert或...

这些都还没有被推动,如果这有帮助的话......

由于您还没有推送到远程(是的,它确实有帮助),您始终可以执行交互式 rebase以从首次引入有问题的文件开始重写您的分支的历史记录。

于 2015-03-19T15:05:44.200 回答
3

如果它没有被推送——你是金子,你可以随心所欲地重写历史。

修改提交是一个好主意,如果您的提交是分支上的最后一个提交(如果不是 - 不用担心,因为它没有被推送,您无论如何都可以相当简单地重写历史)。要获取文件的“旧”版本,您可以使用命令从先前的提交中检出它git checkout COMMIT-HASH-ID path_to_file

因此,如果您的git log --oneline外观输出如下所示 -

 $ git log --oneline
9ab100f Your awesome 10-file commit message
e62c6d5 Merge pull request #607 from origin/someone-elses-feature
cfdf47a someone elses commit message

做就是了

git checkout e62c6d5 path/to/your_file_name.js

然后将其添加到舞台

git add .

然后修改

git commit --amend

看看历史,你应该一切都好。

于 2015-03-19T15:10:15.293 回答