如何将一个分支中的内容复制到另一个分支?

45

我有“develop”和“InitialPomChanges”两个分支。我想将develop分支的所有内容复制到InitialPomChanges分支。


我投票将此问题关闭为从一个分支复制更改的重复。 - mkrieger1
5个回答

56

假设您希望用develop分支中的内容完全覆盖InitialPomChanges分支中的所有内容(即您希望InitialPomChanges分支的内容与develop分支完全匹配),请执行以下操作:

git checkout InitialPomChanges
git checkout develop .  #copies the contents of develop into the working directory
git commit -am "Making InitialPomChanges match develop"

这将使得InitialPomChanges中的最后一次提交与develop分支中的最后一次提交匹配。为了使得未来两个分支之间的合并更加容易,现在执行git merge develop是一个好主意。

或者,如果您想要更改InitialPomChanges的内容并且将合并过程合并为一个单独的提交,可以执行以下操作:

git checkout InitialPomChanges
git merge -s theirs develop

3
顶层方式的可靠性比合并方式更高,因为如果你多次合并分支后出现错误,你可能会陷入这样一种情况:Git会说没有什么可以合并的,因为你之前以特定的方式解决了合并问题,并且它认为那就是你想要的,但你却认为文件现在都是一样的,实际上它们并不相同。当从测试环境部署代码到生产环境时,你不应该进行合并,而应像这里所示的精确复制,以避免将来遇到严重挫败感。 - pilavdzice
1
@pilavdzice - 我不确定这是否是理想的建议。使用合并,您可以始终返回到特定提交更改并确定如何解决它们,然后分支并进入不同的开发路径。第一个解决方案是覆盖。因此,您会明确丢失本地更改。有时是必要的,但我认为这不应该是任何时候的常规做法。暂存->生产应始终进行发布审查检查,这更多关于流程而不是git - 直接复制通常是不好的做法,因为没有操作信息(日志或更改信息)。 - David Lannan

14

你可以使用git mergegit rebase

如果你在InitialPomBranch上,你可以简单地运行

git merge develop
或者
git rebase develop

第一个命令将把develop分支上所有的提交合并到InitialPomBranch分支中。第二个命令将把develop分支上所有的提交放在InitialPomBranch第一次提交的下面。

编辑:Rebase会更改InitialPomBranch所有提交的SHA哈希值。因此,您需要运行:

git push -f origin InitialPomBranches 

推送所有更改


2
еңЁе…¬е…ұеҲҶж”ҜдёҠдҪҝз”Ёgit rebase(жҲ–иҖ…ејәеҲ¶жҺЁйҖҒ)еҸҜиғҪдјҡеҪұе“Қе…¶д»–иҙЎзҢ®иҖ…пјӣиҜ·иҖғиҷ‘他们жҳҜеҗҰйңҖиҰҒиҝӣиЎҢеҸҳеҹәж“ҚдҪңд»ҘеҸҠеҗҲ并жҳҜеҗҰжӣҙдёәйҖӮеҗҲгҖӮ - Jonas Malaco
我认为 git rebase develop 会将当前分支的提交重放到 develop 上,这与用户想要的相反。此外,git rebase 将当前分支移动到新目标,这几乎肯定不是用户想要做的。在这种情况下,我建议避免使用 rebase。 - David Deutsch
@DavidDeutsch,是的,它将会重放提交到develop分支,但是它会发生在InitialPomBranches分支上,从而改变InitialPomBranches中提交的ID,正如我在答案中提到的。不确定您所说的移动当前分支的意思。我非常确定没有这样的“移动”操作。 - TheGeorgeous

3
$ git merge develop 

请确保您当前所在的分支是InitialPomChanges


1
你可以运行。
git checkout develop
git branch -D InitialPomChanges
git checkout -b InitialPomChanges

这将删除InitialPomChanges分支,并创建一个新的InitialPomChanges分支,其中包含develop分支的所有内容。

0

我的当前分支是 develop,我想要将内容复制到main分支。

所以我尝试了git merge main

这给了我一个错误,因为我的main分支是空的

fatal: refusing to merge unrelated histories

所以我尝试了这个命令

git merge main --allow-unrelated-histories

然后我同步了所有更改(在vs code中,查看左下角,您将在分支名称右侧获得此图标) 它起作用了


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