【git】git冲突解决详解

git冲突解决详解

  • 方法1:pull下来然后修改冲突文件
  • 方法2: cherry-pick然后checkout

git merge时,不免产生各种各样的冲突,可是我们连如何选择版本都晕半天,这里进行详细解答。
本文参考 git merge冲突解决,该文章描述了更多冲突情况,但需要一定git基础,而本文仔细到每一步操作, 适合新手

案例:我们的远程仓库上有main和master两个分支,我们想将master合并到main上,然后删除master,但是两边都存在README.MD,我们想保留master分支那个

方法1:pull下来然后修改冲突文件

创建并进入工作目录
初始化

$ git init   #初始化本地仓库

将一个远程仓库添加到本地的仓库当中

$ git remote add origin https://gitee.com/用户个性地址/xxx.git   #之后origin相当于这个url的“别名”,可以用origin来代替整个url

把main分支添加进来,git pull 命令基本上就是 git fetch 和 git merge 命令的组合体,Git 从指定的远程仓库中抓取内容,然后马上尝试将其合并进你所在的分支中

git pull origin main

如果两个分支毫无渊源,要加上后面的–allow-unrelated-histories,否则合并时报错

git pull origin master --allow-unrelated-histories

此时已经进入MERGING状态,查看冲突文件

git status

也可以采用命令:git ls-files -s,查看冲突文件该命令输出的第二列的值如果为0表示对应的文件没有冲突,合并成功,如果不为0,则表示产生了合并的冲突,其中具体的值对应的意义是:1表示两个用户之前一个共同版本的对应文件内容;2表示当前用户对应的文件版本;3表示合并后的文件对应的远程版本
【git】git冲突解决详解_第1张图片
然后使用git mergetool命令或git show :n:filename(n替换为上述数字)查看对应文件的对应版本的内容
【git】git冲突解决详解_第2张图片

比较各版本,用vscode打开冲突文件,上方会弹出选择版本的选项,选择需要保留的版本

冲突解决,添加已经解决冲突的文件

git add -A   #添加全部文件

再次git status查看状态,全部都changes to be committed即可提交

git commit -m "提交信息"

push回远程仓库的main分支

git push -u origin main:main  #意思是推送本地的main到远程的main,同名情况可以省略":main"

最后删除远程仓库中多余的master分支

git push origin --delete master

方法2: cherry-pick然后checkout

在本地main分支下执行

git cherry-pick master

git status获取当前信息

git status

显示:
Not currently on any branch.
You are currently cherry-picking commit 53e5374.
  (fix conflicts and run "git cherry-pick --continue")
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Unmerged paths:
  (use "git add ..." to mark resolution)
 	both modified: file1.txt

继续

git cherry-pick --continue

提示README.MD有更新,确定替换为远程仓库master的文件,因此这里用theirs(反之则用ours)

git checkout --theirs README.MD

然后添加到本地仓库

git add -A

最后继续cherry-pick

git cherry-pick --continue

你可能感兴趣的:(#,git,git,github)