【问题标题】:git move part of changes from "to be comitted" to local changesgit 将部分更改从“待提交”移动到本地更改
【发布时间】:2019-07-28 05:11:19
【问题描述】:

我有一个文件,我修改了 2 组更改:格式化和添加新功能。

我需要将它们变成 2 个提交。
- 格式更改
- 新功能A。

现在我使用了git add --patch 并上演了所有的格式化内容。所以我有:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   FileA   <-- formatting changes

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   FileA  <-- Feature A

现在在提交之前,我意识到我将一个函数(几行)用于格式更改(它应该落在功能更改中)。

我现在可以以某种方式编辑要提交的更改吗?该文件很重要,我不想再次使用git add --patch

我能想到的唯一可以省略运行 git add --patch 的解决方案是提交当前更改,然后从提交本身中删除这些行。

还有其他方法吗?

【问题讨论】:

  • 我很想知道否决票背后的原因是什么,因为我发现它既有用又明确提出。当然,并不是说可能没有理由投反对票,我只是想知道。

标签: git git-add


【解决方案1】:

还有git reset --patch,与git add --patch相反。

不过,对于单个小改动,使用git gui 会更容易——您只需右键单击它们即可交互式地暂存/取消暂存各个代码行。其他一些 Git GUI 可能具有类似的功能。

如果做不到这一点,这里有一个稍微丑陋的方法来做到这一点,而无需再次经历所有事情:

  • git diff --cached &gt;temp.diff
  • git reset
  • 编辑 temp.diff 并删除包含您不想提交的更改的大块
  • git apply --cached --recount temp.diff
  • 提交

【讨论】:

  • 谢谢,这是我真正需要的!
【解决方案2】:

我建议如下:
使用git stashhttps://www.git-scm.com/docs/git-stash):

  1. git stash --keep-index
    这会将您当前的工作树推送到存储区并保留您的分阶段更改
    注意未跟踪的文件。默认情况下,未跟踪的文件不会被推送到存储区! (还有另一种选择:--include-untracked
  2. 相应地更改FileA
  3. git add -p -- FileA
    暂存您的新更改 - 您现在已准备好您的第一个提交
  4. git stash popgit stash apply(无论您是否希望将更改保存在存储库中)
  5. 现在您的第二次提交在工作树中几乎准备就绪(进行必要的更改、阶段、提交......)

【讨论】:

    猜你喜欢
    • 2014-07-01
    • 2020-07-28
    • 2021-05-01
    • 2019-05-29
    • 2011-12-30
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    相关资源
    最近更新 更多