【问题标题】:Is there a light-touch way to alter a single file that was accidentally committed?是否有一种轻触方式来更改意外提交的单个文件?
【发布时间】:2015-05-22 17:56:17
【问题描述】:

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

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

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

如果有帮助,这些都还没有被推送。

【问题讨论】:

  • 你考虑过接受答案吗?

标签: git git-revert git-amend


【解决方案1】:

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

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

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

如果有问题的提交不是分支上的最后一个,git commit --amend 对你没有多大帮助;有关说明,请参阅this。您可以使用git revert 或...

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

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

【讨论】:

    【解决方案2】:

    如果没有被推送——你是金子,你可以随意改写历史。

    如果您的提交是分支上的最后一个提交,那么修改提交是一个好主意(如果不是——别担心,因为它没有被推送,您无论如何都可以相当简单地重写历史)。要获取文件的“旧”版本,您可以使用命令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
    

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

    【讨论】:

    • 有问题的提交是否是 OP 分支上的最后一个尚不清楚。如果不是这样,git commit --amend 不是正确的命令,在这里。
    • 你说得对,好点子。为您的答案投赞成票,以获得更好的格式和变基章节的链接。
    • 既然你的回答提到了“最后一次提交”的限制,你也可以得到我的支持 :)
    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2011-04-23
    • 2023-03-29
    • 2015-05-04
    相关资源
    最近更新 更多