【问题标题】:Split commit in history在历史记录中拆分提交
【发布时间】:2013-07-03 10:34:58
【问题描述】:

我正在尝试学习如何在历史记录中拆分提交。我使用这个页面来指导我:http://git-scm.com/docs/git-rebase.html#_splitting_commits 我有两个提交,所以我输入了git rebase -i <hashOfTheCommit>^。我将提交的行从pick 更改为edit。然后我输入git reset HEAD^。到现在为止还挺好。现在,提交引入的更改包括在新目录中添加 file1

文件内容基本上是两行:

commit line1

commit line2 

所以我想将此提交拆分为两个提交,每个提交添加一行。但是在我输入git add -p file1 之后,我只得到响应No changes. 并且文件没有添加到索引中。我希望被带入补丁模式,但它不会发生。

【问题讨论】:

    标签: git rebase git-rebase


    【解决方案1】:

    如果 git add --interactive 也不起作用,猜测可能是因为 all 文件已经在索引中。

    如果是这样,请尝试:

    git reset HEAD -- file
    git add -p -- file
    

    【讨论】:

    • all 文件是什么意思?我没有任何具有该名称的文件,并且我的file1git reset HEAD^ 命令之后未被跟踪
    • @coubeatczech "all" = 该文件的全部内容。我想git add --interactive 也不能正常工作?
    • 是的,git add --interactive 也不行,而且文件肯定不在索引中。抱歉,回复晚了,我没有收到通知...
    【解决方案2】:

    您也可以使用 GUI 来执行此任务(它不能作为命令行自动执行,但可能适用于您的情况)。

    只需为要拆分的提交创建一个分支点并签出该分支(我们称此分支为 splitcommit)。打开 GUI (git gui) 并选择“Ammend last commit”(它位于提交描述文本框的上方)。选择该选项后,您将处于与创建相关提交相同的情况,因此您可以选择文件并暂存/取消暂存所需的行(选择显示文件内容的框上的行并根据需要单击舞台/取消舞台)。

    准备就绪后,单击提交。这将修改您的提交,并且您取消暂存的行将显示为未添加到索引的更改。然后,您可以使用这些行创建一个新提交(它将被添加到分支 splitcommit)。如果您想使用新的拆分提交重做原始分支的历史记录,请签出该分支并将其变基到分支 splitcommit

    这不是很简单,但它不是一个非常复杂的过程,不需要使用非常高级的 Git 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 2015-10-29
      • 2014-10-05
      • 2013-08-02
      • 2011-05-17
      • 2011-11-08
      相关资源
      最近更新 更多