【问题标题】:How can I do a git add --patch during an interactive rebase?如何在交互式变基期间执行 git add --patch ?
【发布时间】:2016-01-24 19:16:39
【问题描述】:

我想返回并删除两次提交的提交的几个部分。我希望我可以做git rebase -i HEAD^^,edit 提交,然后在文件上使用git add --patch <file>。但是,在 rebase 期间,git reset HEAD <file> 似乎不起作用,因为当我尝试 git add --patch <file> 时,它说没有任何变化。

【问题讨论】:

    标签: git git-rebase git-add


    【解决方案1】:

    问题在于,在交互式 rebase 期间,HEAD 不指向上一次提交,因此 git reset HEAD 不做任何事情。

    相反,使用git log 查找上一次提交的哈希,然后运行git reset <hash> <file>,然后运行git add --patch <file>。

    然后您可以运行 git checkout -- <file> 来放弃其余的更改。

    【讨论】:

    • 对这个问题/答案没有获得更多投票感到惊讶吗?
    • HEAD 永远不会指向上一个提交,但总是指向最新的提交。使用修订哈希有效,但不是必需的。
    【解决方案2】:

    在 rebase 期间,HEAD 指向已添加到基础上的最新提交。所以git reset head 在两个 rebase 操作之间什么都不做。

    您需要在使用 git reset HEAD^ 之前重置为 1 次提交,然后(以交互方式)添加所需的更改。

    $ git rebase -i ... # change a commit to "edit"
    $ git reset HEAD^
    $ git add --patch
    $ git commit
    

    可能丢弃所有未提交的剩余更改:

    $ git checkout .
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      相关资源
      最近更新 更多