最近发现有些部门刚使用Git的过程,存在一些操作流程不规范,导致合并代码丢失以及stash查看不出来差异的问题。下面我将举例说明问题:
------------------------------------------------------------------------------------
新建两个分支,分别改两个文件提交。然后发起合并。
具体步骤:
---克隆一个版本库
git clonehttp[s]://example.com/path/to/repo.git/
---新建文件
touch a.txt
---编辑文件
vim a.txt
---hello this is a test master
git add a.txt
git commit -m "wrote a txt master"
创建dev分支并切换至dev分支:
git checkout -b dev
touch a.txt
vim a.txt
---this is a dev
git add a.txt
git commit -m "modify a txt dev"
git checkout master
vim a.txt
--hello,this is master
git add a.txt
git commit -m "modify a txt master"
git merge dev---dev往master合并时,冲突;
--冲突了
git status---查看冲突文件
git diff ---查看差异文件
vim a.txt
解决冲突:丢失代码
再提交:
git log 查看分支合并情况
推送到远程仓库:
git push -u origin master
切换到dev分支,pushdev分支到远程仓库
git push origin dev:dev
然后在stash 查看两个分支提交记录:
然后发送合并请求:
在diff中就看不到差异:
原因就是在合并解决冲突时,dev 内容丢失;
如果反向合并,将master合并dev。就可以看到之前解决冲突差异文件。
所以正确解决冲突以及操作的步骤应该是:
当dev向master发起合并请求时,出现冲突;
解决冲突:将master代码反向合并至dev,解决冲突后,更新提交,发起合并master请求;
接下来我们看下正确的操作:
两种方法更新远程分支至本地分支;
1、使用Git pull 更新本地分支进行自动合并;
2、使用git merge 手动合并远程分支至本地分支;
git pll 先从远程仓库获取分支更新本地分支;
git pull origin dev:dev
---取回远程库中的dev支,与本地的dev分支进行merge;
查看dev依然是之前的更改:
然后合并master至dev,dev和master内容一致。
dev分支增加b文件;hi,this is b on dev!
然后进入master 修改文件:
dev合并至master:
这时候冲突,
先取消合并 ,git merge --abort
然后切换至dev,将master合并至dev;
提交合并
然后再向master合并:
此时推送之远程。
git push
git push --set-upstream origin dev
然后查看stash,dev 和master
就不会存在差异:
学会GIT冲突的解决办法了吗?当然这是一种,这是最近困扰很多新手的一个问题,所以需要大家规范操作。O(∩_∩)O哈哈~
领取专属 10元无门槛券
私享最新 技术干货