【问题标题】:How to copy contents of one branch to other branch?如何将一个分支的内容复制到另一个分支?
【发布时间】:2016-05-12 12:03:02
【问题描述】:

我有 'develop' 和 'InitialPomChanges' 分支。我想将develop分支的所有内容复制到InitialPomChanges分支。

【问题讨论】:

标签: git git-branch


【解决方案1】:

假设您想用 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 中的最后一次提交与开发中的最后一次提交匹配。为了使两个分支之间的未来合并更容易,现在做一个git merge develop 是个好主意。

或者,如果您想更改 InitialPomChanges 的内容并在一次提交中进行合并,您可以这样做:

git checkout InitialPomChanges
git merge -s theirs develop

【讨论】:

  • 顶级方式比合并更可靠,因为在多次合并分支后,如果你犯了错误,你可能最终会遇到 git 说没有什么可合并的情况,因为你之前解决了一个合并一种特殊的方式,它假设这是您想要的,但您假设文件现在都是相同的,而它们不是。在将代码从 staging 部署到 prod 时,您不应该合并,如果您想避免有一天出现严重的挫败感,您应该完全按照此处所示进行复制
  • @pilavdzice - 我不确定这是不是理想的建议。通过合并,您可以始终返回到特定的提交更改并确定如何解决它们、分支然后前进到不同的开发路径。第一个解决方案是覆盖。因此,您会特别丢失本地更改。有时这是必要的,但我认为这在任何时候都不应该成为常规做法。暂存 -> 生产应该总是有一个发布审查检查,这比 git 更多关于过程 - 直接复制,通常是不好的做法,因为没有操作信息(日志或更改信息)。
【解决方案2】:

您可以使用git mergegit rebase

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

git merge develop

git rebase develop

第一个会将开发分支的所有提交合并到 InitialPomBranch。第二个会将develop分支的所有提交放在InitialPomBranch的第一个提交之下

编辑:Rebase 将更改 InitialPomBranch 的所有提交的 SHA 哈希值。所以你必须运行

git push -f origin InitialPomBranches 

推送所有更改

【讨论】:

  • git rebase(或一般情况下强制推送)可能会影响其他贡献者;考虑他们是否也被期望变基以及合并是否更合适。
  • 认为 git rebase develop 会将当前分支的提交重播到 develop,这与用户想要的相反。此外,git rebase 将当前分支移动到新的目的地,这几乎肯定不是用户想要做的。在这种情况下,我会避免变基。
  • @DavidDeutsch,是的,它会将提交重播到develop,但它会发生在InitialPomBranches分支中,从而改变InitialPomBranches中提交的ID,正如我在答案中提到的那样。不确定移动当前分支是什么意思。我很确定不会发生这种“移动”
【解决方案3】:
$ git merge develop 

确保您当前的分支是 InitialPomChanges

【讨论】:

    【解决方案4】:

    你可以跑

    git checkout develop
    git branch -D InitialPomChanges
    git checkout -b InitialPomChanges
    

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

    【讨论】:

      【解决方案5】:

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

      所以我尝试了 git merge main

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

      fatal: refusing to merge unrelated histories
      

      所以我尝试了这个命令

      git merge main --allow-unrelated-histories
      

      然后我同步了所有更改(在 vs 代码中查看左下角,您将在分支名称右侧看到此图标) 成功了

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-10
        • 2011-07-15
        • 2021-09-22
        • 1970-01-01
        • 2017-02-15
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多