合并分支到 master

一般开发都是在本地新建自己的分支,然后将修改的代码提交到分支上,最后 push 到远程比如 gitlab 或 github,提交 merge 请求。

但是如果在你开发的过程中,有其他人合并代码到主分支,当你提交合并请求时,就会遇到冲突,无法合并。

如下图所示:

目前的历史记录

处理冲突

可以使用如下步骤进行冲突处理,我使用的代码编辑器是 vscode

首先切换到你的分支,然后执行如下命令:

git fetch origin 
git checkout origin/master
git merge --no-ff ryan_add_install_tips_when_click_download_button

以上操作执行后,会可以在 vscode 中看到你需要处理的冲突文件

删除不需要的内容


重新 commit 并push 到远程的分支上即可

git push origin HEAD:ryan_add_install_tips_when_click_download_button

如何撤销一个合并

你应该始终牢记,你可以在任何时间执行撤销操作,并返回到你开始合并之前的状态。要对自己有信心,你不会破坏项目中的任何东西。只要在命令行界面中键入 “git merge –abort” 命令,你的合并操作就会被安全的撤销。

git fetch 从远端仓库下载新分支与数据    git pull 从远端仓库提取数据并尝试合并到当前分支

Git 有两个命令用来从某一远端仓库更新。 git fetch 会使你与另一仓库同步,提取你本地所没有的数据,为你在同步时的该远端的每一分支提供书签。 这些分支被叫做“远端分支”,除了 Git 不允许你检出(切换到该分支)之外,跟本地分支没区别 —— 你可以将它们合并到当前分支,与其他分支作比较差异,查看那些分支的历史日志,等等。同步之后你就可以在本地操作这些。

第二个会从远端服务器提取新数据的命令是 git pull。 基本上,该命令就是在 git fetch 之后紧接着 git merge 远端分支到你所在的任意分支。 我个人不太喜欢这命令 —— 我更喜欢fetch 和 merge 分开来做。少点魔法,少点问题。 不过,如果你喜欢这主意,你可以看一下 git pull 的 官方文档

假设你配置好了一个远端,并且你想要提取更新,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。 那么,如果我是与两三个其他人合作 Hello World 项目,并且想要将我最近连接之后的所有改动拿过来,我可以这么做:

可以看到自从上一次与远端仓库同步以后,又新赠或更新了五个分支。 “ada”与“lisp”分支是新的,而“master”、“clang”与“java”分支则被更新了。 在此例中,我的团队在合并入主分支之前,将提议的更新推送到远端分支以审核。

你可以看到 Git 做的映射。远端仓库的主分支成为了本地的一个叫做“github/master”的分支。 这样我就可以执行 git merge github/master 将远端的主分支和并入我的本地主分支。 或者,我可以 git log github/master ^master 看看该分支上的新提交。 如果你的远端仓库叫做“origin”,那远端主分支就会叫做 origin/master。几乎所有能在本地分支上执行的命令都可以在远端分支上用。

如果你有多个远端仓库,你可以执行 git fetch [alias] 提取特定的远端仓库, 或者执行 git fetch --all 告诉 Git 同步所有的远端仓库。

简而言之 执行 git fetch [alias] 来将你的仓库与远端仓库同步,提取所有它独有的数据到本地分支以合并或者怎样。

当你解决完冲突,并且在合并完成后发现一个错误,你仍然还是有机会来简单地撤销它。你只须要键入 “git reset –hard ” 命令,系统就会回滚到那个合并开始前的状态,然后重新开始吧!