如何将更改提交到新分支


149

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

我正在尝试使用:

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

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

我应该改用以下命令吗?

git merge "the other branch"

一次提交还是几次提交?
卡尔·诺鲁姆

Answers:


265

git checkout -b your-new-branch

git add <files>

git commit -m <message>

首先,签出您的新分支。然后添加要提交的所有文件。最后,提交刚刚添加的所有文件。您可能需要进行git push origin your-new-branch后续操作,以便您的更改显示在遥控器上。


1
由于我从git checkout v3.0(进行更改之前的分支)new-branch获得了新分支,我是否还需要使用“ git add <files>”?
user1988385 2013年

您可以执行一次git status以查看当前正在上演的内容以及未上演的内容。
约翰·布罗迪

5
为什么都git addgit commit -a
卡尔·诺鲁姆

11
这不是git checkout -b your-new-branch代替git checkout your-new-branch
薛定

1
如果我已经跟踪了文件并且想要切换到新分支,将那些文件添加到新创建的分支怎么办?
ass-king某个问题

57

如果您尚未提交更改

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

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

就像约翰·布罗迪(John Brodie)接受的答案一样,您只需签出新分支并提交工作即可:

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之类的共享远程目录,则除非您知道自己在做什么,否则不应尝试进行此回滚。


3
每个人都应该尝试此代码。因为大多数寻求答案的人,他们已经对您现有的代码进行了一些更改。
Sushin Pv

2
为什么要添加隐藏和隐藏弹出?当您签出新分支时,您的更改将可以添加和提交,而无需隐藏。
特里斯坦

@Tristan如果更改兼容并且文件不会覆盖,那么您是对的。否则,我得到error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.您要写一个新答案还是编辑我的答案?如果没有,我可以自己编辑。
miguelmorin

好吧,你完全正确。我认为您应该完成您的答案,以显示除了接受的答案之外还带来了什么。
Tristan

@Tristan我做到了。OP正在询问一个新的分支机构,在这种情况下,可接受的答案是正确的。我留我的,因为其他人发现我的答案很有用。这已经是一个很长的答案,我很乐意根据任何反馈进行编辑。
miguelmorin

24

如果我理解正确,那么您已经提交了一个承诺,changed_branch并且您想将该提交复制到other_branch?简单:

git checkout other_branch
git cherry-pick changed_branch

5
这是他正在努力实现的正确答案。
肖恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.