从一个分支复制更改到另一个分支。

142

我有一个从master创建的名为BranchA的分支。在BranchA中做了一些更改(但我不想将这些更改合并到master中)。

现在,我又从master创建了另一个名为BranchB的分支。

我该如何将BranchA中的更改复制到BranchB中?


我投票将此关闭为如何从另一个分支获取更改的重复。 - mkrieger1
8个回答

167
git checkout BranchB
git merge BranchA

如果您不打算将更改合并回主分支,则以上所有内容都是针对此情况的。通常最好将所有更改合并回主分支,并从那里创建新的分支。

此外,在执行合并命令之后,您将会遇到一些冲突,需要手动进行编辑和修复。

请确保您在要将所有更改复制到的分支中。 git merge 将获取您指定的分支并将其与当前所在的分支合并。


4
请注意,这将创建一个合并提交,这可能不是你想要的结果。 - icfantv
13
提问者想要将BranchA的更改转移到BranchB,但是这个答案正在将BranchB的更改合并到BranchA。请纠正! - Kalyan Raghu
我使用了git merge DRG origin/master。 - Ashish
如果我删除分支A会发生什么?这会影响分支B中的更改吗? - surya
我认为一旦你在远程仓库上创建了一个分支,你可以在本地的git bash/command line中执行git fetch,然后git checkout "你的新分支"也能正常工作。这样你的更改就只会被复制。 - Brooklyn99

68
不必像其他人建议的那样合并,你可以将一个分支变基到另一个分支上。
git checkout YourBranch
git rebase AnotherBranch

这将把YourBranch取出并将其变基到AnotherBranch上。
这实际上看起来就像YourBranch是从AnotherBranch分支出来的,而不是master

7
如果想将一个分支的更改合并到另一个分支中而不干扰主分支,那么这就是正确的答案。 - Alex Raj Kaliamoorthy
6
合并(merge)和变基(rebase)有什么区别,为什么变基比合并更受推崇? - Coddy
1
@Coddy:当执行合并操作时,merge会创建一个新的提交。然而,rebase将其他分支的提交“整合”到当前分支中。更多信息请参见:https://www.atlassian.com/git/tutorials/merging-vs-rebasing。`rebase`的优点是有助于保持提交历史记录的“清洁”。 - SKPS

9
这是一个两步骤的过程:
  • git checkout BranchB(目标分支为BranchB,所以我们需要在此分支上执行命令)
  • git merge BranchA(它将会把BranchA与BranchB合并。这里你已经合并了分支B的代码)
如果你想将你的分支代码推送到远程仓库,请执行以下命令:
  • git push origin master(它将会把你的BranchB代码推送到远程仓库)

8

BranchA的内容复制到BranchB

git checkout BranchA
git pull origin BranchB
git push -u origin BranchA

3
你为什么想要添加 -u 选项? - Sampath
我认为这并不是原帖作者想要的。 - MarkHu

7
将BranchA的更改合并到BranchB。当你处于BranchB分支时,执行git merge BranchA命令即可。

4
对我而言,解决方法是——将当前更改暂存于分支中,然后切换到另一个分支并应用之前暂存的更改。

2

使用 git switch 的简化解决方案

如果您的 git 版本号高于 2.23,您可以使用 git switch 命令来达到相同的效果,因为 git checkout 命令用于很多事情,有时很容易引起混淆。


// This command will switch(go) to BranchB
// use flag -c if you haven't created this branch yet 
git switch BranchB 


// git merge combines sequences of commits from BranchA to the 
// current branch (which is BranchB)
git merge BranchA

1
如果你正在使用 tortoise git ,请按照以下步骤进行:
  1. 检出 BranchB
  2. 打开项目文件夹,进入 TortoiseGit --> Fetch
  3. 在拉取屏幕中,更改远程分支为 BranchA,然后点击确定。
  4. 然后再次右键单击,进入 TortoiseGit --> Push
现在,你的更改已经从 BranchA 移动到 BranchB。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接