git的冲突解决

2,509 阅读4分钟

使用git命令提交代码时,经常会遇到这些报错,一开始不知道怎么解决,现在想写个笔记记录一下之后遇到方便查阅。

问题场景

场景一:

  1. 当你commit完代码,push到远程后报如图所示错误,说明你之前已经push过代码了,远程和本地产生冲突
  2. 解决:ggpush -f 强制推送至远程,覆盖之前push的代码

场景二:

  1. rebase后报如图所示错误,这个是因为在切分支之前,没有pull更新本地代码,所以在修改相同的文件时,代码产生冲突。
  2. 解决: git rebase --abort 和 git rebase --continue
  • git rebase --abort 撤销rebase,会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃;然后接着回到主分支pull 再rebase。
  • git rebase --continue 执行完git rebase feature/dice 之后,本地如果产生冲突,手动解决冲突之后,用"git add"命令去更新这些内容的索引(index),然后只要执行: git rebase --continue 就可以线性的连接本地分支与远程分支,无误之后就回退出,回到主分支上。

场景三:

image.png 提交代码请求合并时,发现有冲突怎么解决?需要rebase一下目标分支,使用rebase命令合并分支,解决完冲突,执行git add .和git rebase --continue,push。

首先,去到目标分支拉取最新代码(如feature/3q-s1-main),然后rebase目标分支,如下图: image.png 提示信息是需要 git rebase --abort ,撤销rebase,会放弃合并,回到rebase操作之前的状态,接着去vscode修改本地代码冲突。然后add提交

image.png git add后 提示git rebase --continue,帮你一条一条过冲突

image.png 此时,已经把本地分支的代码合并到远程了,而且会保留之前提交的合并请求

补充

rebase和merge的区别

参考:rebase:gitbook.liuhui998.com/4_2.html

git提交过程

新建代码库:

  1. git init 新建代码库
  2. git init workspace 新建目录
  3. git clone 克隆项目
  4. git status 查看仓库当前的状态,显示有变更的文件。

新建分支

  1. git branch -a 列出所有本地分支和远程分支
  2. git branch daily 新建分支,停留在当前分支
  3. git checkout -b daily 新建并切换到新建的分支
  4. git checkout daily 切换分支
  5. git push origin --delete 删除远程分支

提交代码到远程仓库

  1. 在自己的分支将代码添加到暂存区git add . git commit
  2. git status 查看仓库当前的状态,显示有变更的文件。
  3. 回到主分支后git pull,更新远程代码
  4. 切换到新建分支 git rebase, rebase命令是为了防止主分支有更新,文件修改冲突
  5. 推送到远程ggpush

超级好用到stash命令

当你还在写代码,这个分支的需求还没完成,但是需要切一个新的分支或者切换到其他分支修复bug,这个时候本地代码还没有写完没提交怎么办?使用stash命令暂存文件。

  1. git stash 将不需要提交的文件暂存 = git stash push
  2. git stash list 展示stash列表
  3. git status push -m ‘test ’ 自定义message
  4. git stash pop 将暂存到文件恢复,将所需文件提交后执行这个操作 恢复
  5. git stash apply 0/1/2/3 暂存指定的索引到栈
  6. apply和push 都是恢复暂存时的状态 ,区别 :
    1. push 释放暂存内容,但stash列表中的信息会删除
    2. apply 释放暂存内容,但stash列表中的信息是会继续保留
  7. git stash clear 清空所有暂存记录

常用命令总结

1. git rm <文件>** 删除文件
2. git rebase -i A  处理A之后的commit — 可用于删除中途某一次的commit
3. git cherry-pick C 单独抽取c
4. git config  设置用户信息
5. git add || git add . 添加到暂存区
6. git reset HEAD 撤销暂存区的全部文件或单个
7. git reset A --hard. 回退到A
8. 使用一次新的commit,替代上一次提交
如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
9. git checkout - 切换到上一个分支
10. git merge 合并分支
11. git log 查看commit记录 git log -S 搜索某次commit
12. git diff 显示区别  **git diff <文件>** 查看修改内容
13. git fetch 更新远程

这些是自己在工作中常遇到到问题和常用到的git命令,不同的项目和问题可能解决方法会不同, 具体问题具体分析。git命令行工具很强大,熟练使用是我的目标,将会继续的学习补充。

ggpush ggpull 是git push 和 git pull 的简写

奉上文档Oh-My-Zsh Git