我目前有一个项目,其中包含多个分支。主分支长时间没有合并。因此,我想使用最新的代码切换到主分支。
请问您能否提供必要的命令和步骤。
让我重新描述我的问题。
我正在一个具有不同分支的项目中工作。最新的更改是在除主分支以外的某个分支上进行的。现在我的要求是:是否有一种方法可以将当前工作分支移动到主分支而不需要将其与主分支合并,以避免冲突?
我目前有一个项目,其中包含多个分支。主分支长时间没有合并。因此,我想使用最新的代码切换到主分支。
请问您能否提供必要的命令和步骤。
让我重新描述我的问题。
我正在一个具有不同分支的项目中工作。最新的更改是在除主分支以外的某个分支上进行的。现在我的要求是:是否有一种方法可以将当前工作分支移动到主分支而不需要将其与主分支合并,以避免冲突?
如果你想让 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将保留,如果它们没有被主分支跟踪。要移除这些未被跟踪的文件(目录):
git clean -fd
请参见如何从当前Git工作树中删除本地(未跟踪)文件?以获取更多详细信息。
git clean -fd
,请参见 https://dev59.com/4nVD5IYBdhLWcg3wL4YA#64966。 - radistao您想要将 'develop' 分支合并到主分支吗?
git checkout master
git merge develop
还是你想将主分支的更改合并到你的开发分支中?
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
来“备份”你的主分支。)master
分支的历史记录,所以如果你曾经与任何人共享过此分支,则结果将对你们两个人都很困惑。git reset --hard
应该始终谨慎使用,因为它会丢弃所有未提交的更改。如果我理解您的英语正确,您不想将更改合并回主分支,而只是将主分支重置为指向当前检出分支中的最新提交?要做到这一点,请使用:
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
如果你想将一些提交从 branch
合并到 master
,你可以使用 cherry-picking。
这只会将某些提交从 branch
合并到 master
,但是当然不能保证不会发生冲突。
请参见 我的回答,了解如何处理 当 develop 分支与 master 分支非常不同的情况下管理热修复?
然而,如果你想将branch
的所有提交合并到master
中,你就必须进行合并并解决冲突(除非你像Mark所描述的那样使用git reset --hard other-branch
重置master
分支,但这种做法是不被鼓励的)。
在IntelliJ中,您可以执行以下操作:
这将把主分支变成您当前的分支。主分支的历史记录得以保留。我相信有一个git命令行等效方法。
git checkout master
git rebase <working branch>
也许不是很干净,但对我来说有效