如何将更改后的文件添加到Git中较旧的(而非最后一次)提交中

在过去的一小时里,我改变了几件事情,并一步一步地提交了他们,但我意识到我忘记了在某些提交之前添加更改过的文件。

日志看起来像这样:

GIT TidyUpRequests u:1 d:0> git log 
commit fc6734b6351f6c36a587dba6dbd9d5efa30c09ce 
Author: David Klein <> 
Date:   Tue Apr 27 09:43:55 2010 +0200

    The Main program now tests both Webservices at once

commit 8a2c6014c2b035e37aebd310a6393a1ecb39f463 
Author: David Klein <>
Date:   Tue Apr 27 09:43:27 2010 +0200

    ISBNDBQueryHandler now uses the XPath functions from XPath.fs too

commit 06a504e277fd98d97eed4dad22dfa5933d81451f 
Author: David Klein <> 
Date:   Tue Apr 27 09:30:34 2010 +0200

    AmazonQueryHandler now uses the XPath Helper functions defined in XPath.fs

commit a0865e28be35a3011d0b6091819ec32922dd2dd8 <--- changed file should go here
Author: David Klein <> 
Date:   Tue Apr 27 09:29:53 2010 +0200

    Factored out some common XPath Operations

有任何想法吗?


使用git rebase 。 特别:

  • 使用git stash来存储您想要添加的更改。
  • 使用git rebase -i HEAD~10 (或者任何你需要看得足够远的东西)。
  • 通过将行开始处的单词pick更改为编辑,将有问题的提交( a0865... )标记为edit 。 不要删除其他行,因为它会删除提交。 注意: ^
  • 保存rebase文件,git将退回到shell并等待您修复该提交。
  • 使用git stash pop
  • git add添加你的文件。
  • 修改提交git commit --amend
  • 做一个git rebase --continue它将改写其余的提交对新的一个。
  • 如果您标记了多个提交以进行编辑,请从第2步开始重复。
  • ^ (如果您使用的是shell,那么您将不得不点击Insert键进行编辑,然后按Esc键并输入:wq来保存并应用。


    用一个小小的修改“修复”旧提交,而不改变旧提交的提交信息,其中OLDCOMMIT类似于091b73a

    git add <my fixed files>
    git commit --fixup=OLDCOMMIT
    git rebase --interactive --autosquash OLDCOMMIT^
    

    您也可以使用git commit --squash=OLDCOMMITgit commit --squash=OLDCOMMIT时编辑旧的提交消息。


  • git rebase --interactive会调出一个文本编辑器(可以配置)来确认(或编辑)rebase指令序列。 有关于文件中rebase指令更改的信息; 只需保存并退出编辑器( :wq vim :wq )继续进行rebase。
  • --autosquash会自动将所有--fixup=OLDCOMMIT提交到所需的顺序。 请注意,-- --autosquash仅在使用--interactive选项时才有效。
  • ^ OLDCOMMIT^意味着它是在OLDCOMMIT之前提交的提交。
  • 上述步骤适用于验证和/或修改rebase指令序列,但也可以通过以下方式跳过/自动化交互式rebase文本编辑器:

  • GIT_SEQUENCE_EDITOR设置为脚本。
  • 创建一个git别名来自动自动调整所有排队的修正。
  • 创建一个git别名来自动修复一个提交。
  • 看到git commit和git rebase。 与往常一样,当重写git历史记录时,您应该只修正或压缩您尚未发布给任何人的提交(包括随机互联网用户和构建服务器)。


    使用git 1.7,使用git rebase有一个非常简单的方法:

    阶段你的文件:

    git add $files
    

    创建一个新的提交并重新使用您的“已损坏”提交的提交消息

    git commit -c master~4
    

    预先fixup! 在主题行(或squash!如果你想编辑提交(消息)):

    fixup! Factored out some common XPath Operations
    

    使用git rebase -i --autosquash你的提交

    链接地址: http://www.djcxy.com/p/22585.html

    上一篇: How to add a changed file to an older (not last) commit in Git

    下一篇: how can you exit and compile a .am file