协慌网

登录 贡献 社区

如何将我当前的更改提交到 Git 中的其他分支

有时,我在工作目录中进行了一些更改,并且我意识到这些更改应该在与当前目录不同的一个分支中提交。当我想尝试新事物或做一些测试并且忘记事先创建一个新分支,但又不想将脏代码提交给 master 分支时,通常会发生这种情况。

因此,如何使未提交的更改(或存储在索引中的更改)提交到与当前分支不同的分支?

答案

其他答案建议先签出另一个分支,然后再提交给其他分支,只有在给定本地修改的情况下签出才可行。如果没有,那么您处于git stash的最常见用例中:

git stash
git checkout other-branch
git stash pop

第一个stash隐藏了您的更改(基本上是临时提交),随后的stash pop重新应用了它们。这使 Git 可以使用其合并功能。

如果在尝试弹出存储卡时遇到合并冲突...,下一步取决于这些冲突是什么。如果所有隐匿的更改确实属于该另一个分支,则只需要对它们进行排序 - 这是在错误的分支上进行了更改的结果。

另一方面,如果您真的搞砸了,并且您的工作树包含两个分支的更改混合,并且冲突只是您要提交回原始分支的冲突,则可以保存一些工作。和往常一样,有很多方法可以做到这一点。这是一个,从弹出并查看冲突后开始:

# 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文件中的PS1环境变量中$(__git_ps1)来在提示符下输入当前分支名称。 (例如,请参阅Bash 中的 Git 文档。)

您可以只创建一个新分支并切换到该分支。然后提交您的更改:

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

并提供您的提交消息。