217

我刚刚对分支进行了更改。如何将更改提交到另一个分支?

我正在尝试使用:

git checkout "the commmit to the changed branch" -b "the other branch"

但是,我认为这不是正确的做法,因为在这种情况下,我正在创建一个新分支,而不是将更改提交到“另一个分支”。

我应该改用以下命令吗?

git merge "the other branch"
4

3 回答 3

378
git checkout -b your-new-branch
git add <files>
git commit -m <message>

首先,结帐到您的新分支。然后,添加您要提交到暂存的所有文件。最后,提交您刚刚添加的所有文件。您可能想在git push origin your-new-branch之后再做一次,这样您的更改就会显示在遥控器上。

于 2013-02-01T22:08:38.077 回答
105

如果您尚未提交更改

如果您的更改与其他分支兼容

问题就是这种情况,因为 OP 希望提交到新分支,并且如果您的更改与目标分支兼容而不会触发覆盖,也适用。

正如约翰布罗迪接受的答案一样,您可以简单地签出新分支并提交工作:

git checkout -b branch_name
git add <files>
git commit -m "message"

如果您的更改与其他分支不兼容

如果您收到错误消息:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

然后你可以存储你的工作,创建一个新分支,然后弹出你的存储更改,并解决冲突:

git stash
git checkout -b branch_name
git stash pop

就好像您在创建新分支后进行了这些更改。然后你可以像往常一样提交:

git add <files>
git commit -m "message"

如果您已提交更改

如果您想将提交保留在原始分支中

请参阅 Carl Norum 的答案,在这种情况下,这是正确的工具:

git checkout <target name>
git cherry-pick <original branch>

如果您不想将提交保留在原始分支中

请参阅 joeytwiddle 对这个潜在重复项的回答。根据需要执行上述任何步骤,然后回滚原始分支:

git branch -f <original branch> <earlier commit id>

如果您已将更改推送到 GitHub 等共享远程,则除非您知道自己在做什么,否则不应尝试此回滚。

于 2018-05-04T14:43:54.730 回答
31

如果我理解正确,您已经做出了承诺changed_branch并且您想将该承诺复制到other_branch? 简单的:

git checkout other_branch
git cherry-pick changed_branch
于 2013-02-01T22:23:09.290 回答