如何在git中将当前工作分支移至主分支


How to move the current working branch to master branch in git

我目前有一个项目,它包含更多分支。 硕士分支尚未合并很长时间。 所以我想切换到掌握最新代码。

您能给我一些必要的命令和步骤吗?

让我重新提出我的问题。

我在一个有不同分支机构的项目中工作。 最新的更改是在除master以外的其他分支中进行的。 现在我的要求是:有没有一种方法可以将当前的工作分支移至master而不将其与master合并,以避免冲突?


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

1
2
git checkout master
git checkout other_branch .

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

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

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

1
git clean -fd

请参阅如何从当前的Git工作树中删除本地(未跟踪)文件?更多细节。


您想将"开发"分支合并到master吗?

1
2
git checkout master
git merge develop

还是要将主更改合并到开发分支中?

1
2
git checkout develop
git merge master

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

1
git reset --merge

但是,如果只想使当前master与其他分支相同,则可以使用以下方法:

1
2
git checkout master
git reset --hard other-branch

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

  • 您将丢弃master分支上的所有工作。也许您以后可能想要那个历史? (您总是可以事先用git branch old-master master"备份"您的master分支。)
  • 您正在重写master分支的历史记录,因此,如果您曾经与任何人共享此分支,那么结果将使你们俩都感到困惑。
  • git reset --hard应始终谨慎使用,因为它会丢弃您的所有未提交的更改。

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

    1
    git branch -f master

    您需要将当前分支合并到master分支。我这样做的方式是:

    1
    2
    3
    4
    5
    6
    7
    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

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

  • git checkout主

  • git checkout branch_from_which_you_have_to_copy_the_files_to_master。

    (带期间)

  • git添加--all

  • git push -u原始主机

  • git commit -m"从分支复制到主"


  • 如果要从branchmaster进行一些提交,则可以使用Cherry-Picking。

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

    当develop分支与master完全不同时,请参阅我对管理修补程序的回答。

    但是,如果要将所有提交从branch提交到master,将无法合并并解决冲突(除非您按照Mark的描述并阻止了git reset --hard other-branch master分支)。


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

  • 检出分支以合并到master。
  • VCS-> Git->合并更改
  • 选择主人
  • 将策略更改为"我们的"
  • 选择"不快进"。
  • 点击"合并"
  • 提交(可能不需要)
  • 这会将master变成您当前的分支。主人的历史被保留。我确定有一个git命令行等效项。


    如果要将工作分支合并到主分支中,还可以使用rebase,它稍微干净一些。

    1
    2
    git checkout master
    git rebase <working branch>


    也许不是很干净,但是对我有用

    • git pull#获取所有更改
    • 切换到my_branch
    • 复制所有文件tmp dir
    • 切换到主人
    • 删除母版中的所有文件
    • 从tmp目录复制文件
    • 承诺