如何提交我的当前更改到不同的分支git

有时候会发生,我在工作目录中做了一些改变,我意识到这些改变应该在不同于当前版本的分支中提交。 这通常发生在我想尝试新事物或做一些testing的时候,我忘记了事先创build一个新的分支,但是我不想把脏代码提交给主分支。

那么, 如何将未提交的更改(或存储在索引中的更改)提交到与当前不同的分支呢?

其他的答案build议检查另一个分支,然后承诺,只有在结账是可能的情况下,本地修改。 如果没有,你在git stash最常见的用例:

 git stash git checkout other-branch git stash pop 

第一个stash隐藏你的变化(基本上做一个临时提交),随后的隐藏stash pop重新应用它们。 这让git使用它的合并function。

如果当你试图popup存储,你会遇到合并冲突…接下来的步骤取决于这些冲突是什么。 如果所有隐藏的变化确实属于另一个分支,那么您只需要对它们进行sorting – 这是对错误分支进行更改的结果。

另一方面,如果你真的搞砸了,而且你的工作树混合了两个分支的变化,冲突就在你想要在原始分支上提交的冲突中,你可以保存一些工作。 像往常一样,有很多方法来做到这一点。 这里有一个,从你popup后看到冲突开始:

 # Unstage everything (warning: this leaves files with conflicts in your tree) git reset # Add the things you *do* want to commit here git add -p # or maybe git add -i git commit # The stash still exists; pop only throws it away if it applied cleanly git checkout original-branch git stash pop # Add the changes meant for this branch git add -p git commit # And throw away the rest git reset --hard 

或者,如果您提前意识到发生这种情况,只需提交属于当前分支的内容即可。 你总是可以回来修改那个提交:

 git add -p git commit git stash git checkout other-branch git stash pop 

当然,请记住,这一切都花了一些工作,并避免下一次,也许通过将您的当前分支名称在您的提示中,您的bashrc中添加$(__git_ps1)到您的PS1。 (例如见Bash文档中的Git )

你可以创build一个新的分支并切换到它。 然后提交您的更改:

 git branch dirty git checkout dirty // And your commit follows ... 

另外,你也可以签出一个现有的分支(只是git checkout <name> )。 但是,只有在没有冲突的情况下(所有编辑的文件的基数与当前分支的基数相同)。 否则,你会得到一个消息。

  1. git checkout my_other_branch
  2. git add my_file my_other_file
  3. git commit -m

并提供你的提交信息。