ᕕ( ᐛ )ᕗ xiaoli's blog

使用git rebase合并冲突

; 1042 words  

目录

今天在公司使用git rebase master解冲突失败,同事悉心教我,下来再研究一下。

git rebase master

 回退分支

这一步可以跳过,只是我错误rebase操作导致目前分支代码不正常,需要先回滚代码。

git log

commit b77bd104afddea0cb0c861dd03ecd3350848xxxx (HEAD -> i18n_author_guide, origin/i18n_author_guide)
Author: lishenyu <lishenyu@xx.com>
Date:   Mon Nov 14 20:16:42 2022 +0800

    fix: rebase master
commit 1afc280edcc522f1749112476a0406ba0683xxxx
Author: zheng <zheng@xx.com>
Date:   Wed Nov 9 14:14:16 2022 +0800

    fix: idl更新

可以看到,我需要通过logID回退到历史版本。

git reset --hard 1afc280edcc522f1749112476a0406ba0683xxxx                                            

HEAD is now at 1afc280 fix: idl更新

git reset实现回退操作。首先需要明确三个区域:工作区/ 暂存区/ Repository。
我们对工作区中的代码进行修改,使用git add .将修改的所有代码添加到暂存区,使用git push将暂存区中的代码提交到远程的Repository。

1. git rebase master

确保master分支已于远程同步,使用git rebase master,解决冲突。
对于冲突的解决需要看清楚,如果是业务冲突需要手动合并,如果是框架生成的代码冲突需要按照master的代码来。
如果rebase时存在冲突,可以使用goland的可视化工具,git->resolve conflicts,出现此次rebase冲突的代码,可以直接点击进入响应文件进行冲突的手动解决。

左边是自己分支的代码,右边是要rebase的分支的代码,中间是修改后的代码。根据需要accept left或accept right。点击apply后自动实现 git add .,下一步可以直接git rebase --continue

2. git push -f

当解决完所有的冲突成功合并后,需要使用push -f强制推到远端。
需要注意:git rebase后提交,相当于将自己的分支提交到了master分支后面,
用下面两个动图可能更加清晰:
merge:

rebase:

git rebase的其他指令

同时,在使用rebase master合并分支的时候,有时也会看到终端提示git rebase --continuegit rebase --abort \ git rebase --skip

  1. 产生master分支的备份,放在临时分支
  2. 在临时分支上应用当前分支的每一次提交,如果出现冲突就会终止
    而这个git rebase –skip,其实就是跳过某次提交,所以合并到最后肯定会丢代码。😅慎用该指令哈。

参考

git reset: https://www.jianshu.com/p/c2ec5f06cf1a
resolve conflicts: https://www.jetbrains.com/help/go/resolve-conflicts.html
rebase和merge: https://waynerv.com/posts/git-rebase-intro/

#git