Git 冲突时的常用操作

414 阅读2分钟

这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

场景例子

更新代码时,遇到代码冲突的时候

  1. 没有使用git add 将代码加到暂存区,即代码还在工作区时,使用 git checkout命令丢弃修改。

    git checkout [file path]

    ## 丢弃app.java文件的修改
    git checkout app.java 
    ## 丢弃所有工作区的修改
    git checkout . 
    
  2. 在使用了git add将代码加到暂存区了,使用 git reset HEAD 命令

  • 保留工作区、清除暂存区代码 git reset [--mixed] HEAD^

  • 保留工作目录的内容,并将工作区的内容所带来的新文件差异放进暂存区 git reset --soft HEAD^

  • 清除工作区、暂存区的代码 git reset --hard HEAD^

  1. 本地有暂时不方便提交的代码时,例如突然有bug要修复,本地的代码还在开发中,那么就适合使用 git stash命令将代码储存起来。
git stash save 'msg' # 保存当前工作区修改的内容
git stash list # 查看stash栈的所有内容
git stash apply # 恢复stash栈储存的内容到本地,但不删除
git stash drop # 主动删除stash栈储存的内容
git stash pop # stash栈顶出栈

# 当stash 里面有多个存储时,想指定某一个恢复
git stash apply stash@{0}
或
git stash pop stash@{0}
  1. git push时提示推送失败
  • 不同人修改了不同文件;
  • 不同人修改了同文件的不同区域;
  • 不同人修改了同文件的同一区域;

前两种情况,使用git pull 可以实现代码自动合并; 也可以使用git fetch 和 git merge 命令去分开手动执行。

git fetch # 将远程分支更新到本地
git merge xxx # 合并远程分支

xxx 可以是远程分支上的某个提交,也可以是远程分支的名字,例如origin/master

第三种情况,使用git pull命令的话,git 在自动合并时可能会报错。这种情况是需要手动修改冲突提交的,因为git无法选择应该保留冲突的哪一方。

找到冲突的文件,使用vi 或者ide 将冲突修复,看保留哪些修改。 修改完后,使用git add + commit 命令将文件提交,后推送即可。

ghFtNn.png

参考文章

[Git Reset 三种模式] www.jianshu.com/p/c2ec5f06c…