【问题标题】:How to move the current working branch to master branch in git如何将当前工作分支移动到git中的主分支
【发布时间】:2011-11-03 11:36:49
【问题描述】:

我目前有一个包含更多分支的项目。 master 分支很久没有合并了。所以我想用最新的代码切换到master。

能否请您给我必要的命令和步骤。

让我重新提出我的问题。

我正在一个具有不同分支的项目中工作。最新的更改是在 master 以外的某个分支中。现在我的要求是:有没有办法将当前工作分支移动到master而不与master合并,以避免冲突?

【问题讨论】:

  • 恐怕您必须澄清您的问题,以便任何人都能提供帮助。我是否正确理解您正在处理具有许多分支的存储库,但是这些分支已经有一段时间没有合并回master 分支,现在您想要合并其中一个或多个分支的工作进入master?
  • 我不明白您将分支“移动”到 master 是什么意思?你想在主分支上工作吗?比“git checkout master”应该做的伎俩。另外,这似乎是一个纯粹的 git 问题,您可能应该删除 ruby​​-on-rails 标签。
  • 如果您的代码与 master 产生冲突,那么任何代码移动都必须解决这些冲突。这个分支代码移动到另一个在GIT中被称为merge

标签: git


【解决方案1】:

如果您想在 master 中拥有与 other_branch 中完全相同的文件状态并保存历史记录 - 请执行以下操作(并注意末尾的句点):

git checkout master
git checkout other_branch .

现在您将在当前 master 中拥有 other_branch 的完整副本(它比 reset 更软),尚未提交。然后进行常规提交:

git add --all
git commit -m "* copy other_branch to master working tree"

注意: 来自 other_branch 的未跟踪(未索引)文件(目录)将保留,如果它们未被 master 跟踪。要删除那些未跟踪的文件(目录):

git clean -fd

更多详情请见How to remove local (untracked) files from the current Git working tree?

【讨论】:

  • 看起来这不是为我删除文件夹。
  • 你的意思是空目录?
  • 不,来自 master 的非空文件夹由于某种原因而保留,即使它在 other_branch 中不存在。
  • 谢谢。这对我有用,但历史不会复制到主人。
  • > 但历史不会复制到主控。这是一个不同的故事 - rebase 是您的选择。
【解决方案2】:

您想将“开发”分支合并到 master 中吗?

git checkout master
git merge develop

或者您想将 master 中的更改合并到您的开发分支中?

git checkout develop
git merge master

【讨论】:

    【解决方案3】:

    首先,我会尝试将它合并到master 并查看是否真的有很多冲突 - git 的合并非常适合仅标记真正的冲突。如果您在开始之前确保您的git status 是干净的,并且您发现有太多的冲突需要处理,您可以返回:

    git reset --merge
    

    但是,如果您只是想让您当前的 master 与您的其他分支相同,您可以这样做:

    git checkout master
    git reset --hard other-branch
    

    但是,这通常是个坏主意,因为:

    1. 您正在丢弃主分支上的所有工作。也许你以后可能想要那段历史? (您可以随时使用 git branch old-master master 预先“备份”您的主分支。)
    2. 您正在改写 master 分支的历史记录,因此,如果您曾与任何人共享此分支,结果会让你们俩都感到困惑。
    3. git reset --hard 应始终谨慎使用,因为它会丢弃您所有未提交的更改。

    【讨论】:

      【解决方案4】:

      如果我正确理解您的英语,您不想将您的更改合并回 master,而只是将 master 重置为指向您当前签出分支中的最新提交?为此,请使用:

      git branch -f master
      

      【讨论】:

        【解决方案5】:

        您需要将当前分支合并到主分支。我的做法是:

        1) git fetch origin  # get all branches from server  
        2) git rebase master # update your local master to the origin master, in case master has changed upstream
        3) git checkout <branch>  # go to your branch
        4) git rebase master # rebase your branch to master; applies your branch's changes ontop of the master, where it diverged
        5) git checkout master # go back to master
        6) git merge <branch> # merge your branch into master.  since you rebased, this should be trivial
        7) git push # push your master upstream
        

        【讨论】:

          【解决方案6】:

          如果要将文件从分支复制到 master,请执行以下命令。

          1. git 结帐大师

          2. git checkout branch_from_which_you_have_to_copy_the_files_to_master 。

            (带句号)

          3. git add --all

          4. git push -u 原点主控

          5. git commit -m "从分支复制到master"

          【讨论】:

          • 用 5 替换 4 步
          【解决方案7】:

          如果你想从branchmaster 进行一些提交,你可以使用cherry-picking

          这只需要从branchmaster 的某些提交,但当然不能保证不会发生冲突。

          my answerManaging hotfixes when develop branch is very different from master?

          但是,如果您想将 allbranch 提交到 master,您将无法绕过合并和解决冲突(除非您将 git reset --hard other-branch master 分支作为Mark 描述并劝阻)。

          【讨论】:

            【解决方案8】:

            如果你想将工作分支合并到master中,你也可以使用rebase,它更干净一些。

            git checkout master
            git rebase <working branch>
            

            【讨论】:

            • 但不推荐用于已经推送到另一个远程存储库的分支,或者分支,因为其他分支已经启动。
            • 你是对的。但我假设,他想为 master 分支做一个快进
            【解决方案9】:

            至少在 IntelliJ 中,您可以执行以下操作:

            1. 签出要合并到 master 的分支。
            2. VCS->Git->合并更改
            3. 选择主人
            4. 将策略更改为“我们的”
            5. 选择“不快进”。
            6. 点击“合并”
            7. 提交(可能不需要)
            8. 推送

            这会将 master 变成您当前的分支。 master 的历史被保留。我确定有一个等效的 git 命令行。

            【讨论】:

              【解决方案10】:

              也许它不是那么干净,但它对我有用

              • git pull #获取所有更改
              • 切换到 my_branch
              • 复制所有文件 tmp dir
              • 切换为主
              • 删除master中的所有文件
              • 从 tmp 目录复制文件
              • 提交

              【讨论】:

              • 这听起来不像是 git 方式:(
              • 不过很简单))
              猜你喜欢
              • 2011-11-01
              • 2022-11-25
              • 2012-04-20
              • 2015-01-21
              • 1970-01-01
              • 1970-01-01
              • 2021-08-02
              • 1970-01-01
              相关资源
              最近更新 更多