如何在git中移动当前工作分支到主分支

  • 本文关键字:分支 当前工作 移动 git git
  • 更新时间 :
  • 英文 :


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

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

让我重新定义我的问题。

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

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

git checkout master
git checkout other_branch .

现在您将在当前中拥有other_branch的完整副本(它比reset软),但尚未提交。然后定期提交:

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

注意:other_branch中的未跟踪(未索引)文件(目录)将保留,如果它们没有被master跟踪。删除未跟踪的文件(目录):

git clean -fd

参见如何从当前Git工作树中删除本地(未跟踪的)文件?

是否要将'develop'分支合并到master中?

git checkout master
git merge develop

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

git checkout develop
git merge master

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

git reset --merge

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

git checkout master
git reset --hard other-branch

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

    你在扔掉主分支上的所有工作。也许你以后会想知道这段历史?(你可以事先用git branch old-master master"备份"你的主分支)
  1. 你正在重写master分支的历史,所以如果你曾经和任何人分享过这个分支,结果会让你们两个都感到困惑。
  2. git reset --hard应该谨慎使用,因为它会丢弃所有未提交的更改。

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

git branch -f master

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

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

如果您想将文件从分支复制到主分支,请执行以下命令:

  1. git checkout master

  2. git checkout x_branch .

    (时期)

  3. git add—all

  4. git commit -m "从x_branch复制所有内容到master"

  5. git push -u origin master

如果您想从branchmaster进行一些提交,您可以使用择优选择。

只接受从branchmaster的某些提交,但是–当然;不能保证不发生冲突。

看我对的回答,当开发分支与主分支非常不同时管理热修复?

然而,如果你想把所有的提交从branchmaster,你将无法绕过合并和解决冲突(除非你git reset --hard other-branch master分支描述–和气馁&;由马克)。

如果你想将工作分支合并到主分支中,你也可以使用rebase,这更简洁一些。

git checkout master
git rebase <working branch>

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

  1. 签出分支以合并到master。
  2. vc -> Git ->合并变化
  3. 选择主
  4. 将策略更改为"ours"
  5. 选择"No fast forward"。
  6. 点击"合并"
  7. 提交(可能不需要)

这会把master变成你当前的分支。大师的历史得以保存。我确信有一个git命令行是等价的。

也许它不是那么干净,但它适合我

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

最新更新