git stash save -u和-p

时间:2013-03-25 17:00:20

标签: git

我正在尝试将一个提交分成五个提交。我的计划是使用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

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:4)

这是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标志)将只提交分阶段的更改。