4

我正在尝试将一个提交分成五个提交。我的计划是使用git stash save -p和存储除了我在第一次提交中想要的东西之外的所有东西。然后提交更改,git stash apply隐藏除了我在第二次提交中想要的所有内容等。但是我的原始提交包含新添加的文件,而且似乎我无法使用 -p 选择要存储的内容,也无法存储未跟踪的文件同时使用 -u 。

$ git stash save -u -p "take 4"
Can't use --patch and --include-untracked or --all at the same time

有没有办法做到这一点?

4

2 回答 2

3

这是一个教科书用例git add -p

请执行下列操作:

  • 查看您要拆分的提交。
  • git reset HEAD~. 这将“撤消”提交而不会丢失其更改。它们将在工作树中,未上演。
  • 五次:
    • git add -p(并在此“阶段”中添加您想要的更改)。git add当您来到希望它们成为其中一部分的补丁时,您将需要在原始提交中添加的任何文件。
    • 可选地,git diff --staged查看您将要提交的内容和/或git diff查看您打算提交的内容。
    • git commit

这将为您提供五个单独的提交。您也可以使用git add -i代替git add -p. 此用例不是用于git stash.

它的工作方式是利用 Git 的“暂存区”(也称为“索引”)。您的工作副本中有大量更改。您使用git add“暂存”更改。然后git commit(没有-a标志)将只提交分阶段的更改。

于 2013-03-25T17:04:07.463 回答
0

如前所述,git add -p绝对是解决原始问题的方法。

不过,关于次要问题:

Can't use --patch and --include-untracked or --all at the same time

就我而言,我想包含一些未跟踪的文件,但使用 --patch 来选择一些跟踪的东西来存储。我们称这些组合为“diff A”。我所做的是首先进行逆设置:将不属于 diff A 的代码隐藏起来,这样就清除了使用的方式git add the_untracked_file,然后git stash push将跟踪和未跟踪的内容都放入一个存储区。

于 2021-11-19T17:10:52.710 回答