Git - 如何在(未保存的)n + 1修改之前提交n + 2修改

时间:2015-11-15 12:39:32

标签: git

除了凌乱的标题(使用Git)之外,我如何修改和提交已经在暂存区域中添加的文件,但是能够保留原始的暂存文件以便在之后提交它?

也许还不够清楚所以这里有一个简单的例子来说明:

  1. 我使用以下指定内容test.txt制作ABC文件(例如文件v1)
  2. 我承诺,顾客很高兴..
  3. 然后我要求做出以下修改ABC DEF(比如文件v2)
  4. 我做了修改,但我没有上演或提交
  5. 我主动将文件更改为ABC DEF GHI(比如文件v3)
  6. 现在我对这个文件很满意,但我意识到我没有上演或提交前一个文件(v2),但我还想保留这个v3以供日后使用。
  7. 所以在这个阶段:

    1. 如何在Git中保存v3修改?
    2. 然后通过撤消我的修改然后提交v2 ..
    3. 返回文件v2
    4. 恢复我的v3?
    5. 提交我的v3?
    6. 我在上面的第6步之后尝试了以下内容:

      1. 我在v3 git add . =>上做了git status以绿色
      2. 显示要提交的更改
      3. 我修改了文件并返回到我的v2 => git status向我显示要提交的更改以绿色显示未提交提交的更改以红色显示
      4. 我尝试了git commit -am "v2",但由于git status向我显示没有提交
      5. ,我失去了所有v3工作

        我希望这个微不足道的解释足够清楚而不会无聊。但实际上这是我更现实的情况:

        1. 我有一个功能A来实现文件。
        2. 我在文件中进行了必要的更改,并添加了功能A.
        3. 但是没有意识到我添加了自定义功能B以便尝试。
        4. 然后我意识到这个新功能B足够好以备以后使用。
        5. 这次我通过良好的旧文件系统管理(也就是重命名文件)来管理这个笨拙的工作流程,但是这个坏习惯不会很快离开我,所以至少我想用Git做这个奇怪的过程。

          再次感谢您

2 个答案:

答案 0 :(得分:1)

据我所知,您对一组文件进行了一些更改。现在,您希望根据它们对应的功能将这些更改分为2个提交(v2和v3)。尝试使用

暂存更改

git add -p

这是git add --patch的简写,让您以交互方式在变化之间进行选择。让我们说你想先提交v2。输入' y'对于与v2和' n'相对应的更改对于v3。如果hunk包含v2和v3更改,则通过输入'来拆分它。 提交v2后,继续进行v3更改并进行提交。

如果您还不想暂停或提交v3的更改,但是您希望git将其保存以供日后使用,那么"存储"这些变化是您拥有的最佳选择。 简单地说,

git stash

隐藏所有未分级的更改。

如果你想挑选藏匿的变化,你可以这样做:

git stash -p

我喜欢给我的藏匿名称,以便我以后能记住这些变化的内容。为此:

git stash save -p Name_here

希望这会有所帮助。 :)

答案 1 :(得分:1)

两个小傻瓜。

-a is the "all" switch。当你使用它时,git会获取索引中所有内容的worktree版本。你想要索引中的v2和git commit-m v2

如果没有-a git commit只提交索引中的内容,那么请将您的v2内容编入索引并提交。

我同意c-rish,git add --patch是您的工具,有选择地从工作树中添加更改。使用工作树中的v3,git add --patch并仅选择v2更改。还有一个git reset --patch来有选择地撤消更改。