git常见问题场景解决

背景

  本文记录工作中使用git常遇到的四种问题的对应解决方案:

    1. 合并分支时PR冲突,不可自动合并
    2. 要挑选某次提交紧急上线(cherry-pick)
    3. 本地commit了发现commit错了要撤销
     4. 都push到远程了才发现有点问题要撤销

1、pull-request冲突解决

场景:

  修复线上bug,在生产分支prd拉了一个紧急修复分支hotfix开发上线,开发完后正常迭代的dev分支要合并到prd分支进行下个迭代上线时报pr冲突,无法自动合并。

解决方法
    合并路径:hotfix->prd->dev
    下面以prd->dev为例(hotfix->prd此时一定无冲突)
  git checkout prd # 本地切换到prd分支
  git pull # 本地拉取最新的prd代码
  git checkout dev # 切到dev分支
  git pull # 本地拉取最新dev分支代码
  git merge prd # 本地将prd-> dev
  # 手动解决冲突后重新提交
  git add .
  git commit
  git push
  # 此时dev已经有prd最新代码了,再pr无冲突,可自动合并

2、cherry-pick

场景:

  要从dev分支选择某些提交到prd分支上线。

解决方法
  git checkout prd # 切换到生产分支
  git pull # 更新本地仓库生产分支代码
  git cherry-pick f4ac2d9e2 # 挑选要上线的提交

  如果无冲突,直接push就好(已经commit了)
  如果冲突了,分支名会变为:(prd|CHERRY-PICK),先手动解决冲突 ,然后

  git add 冲突文件 
  git commit 冲突文件  
  git cherry-pick --continue
  git push

3、撤销本地提交

场景:

  已经提交到本地仓库了发现提交错了(commit了没push)

解决方法
  git reset --soft HEAD^ # 撤销上次本地提交
  git reset --soft HEAD~3 # 撤销上3次本地提交
  # --soft 撤销commit,不删除本地空间代码,不撤销git add .
  # --mixed 撤销commit,不删除本地空间代码,撤销git add .
  # --hard 撤销commit,删除本地空间代码,撤销git add .

4、撤销已经提交到远程仓库的提交

场景:

  已经提交到远程仓库了发现提交错了(已经push成功了)
  网上有人说用git reset --hard再git push -f,这显然是不安全的

解决方法1
 git log # 找到要回滚的提交,假设是f4ac2d9e2
 git revert f4ac2d9e2 # 用一次反向提交去覆盖,分支往前走
 git push
解决方法2

简单粗暴的方式:拷代码,利用git的文件跟踪能力。
前提:此时把分支抢占,禁止其他人再提交代码
   1、先复制下项目整个文件夹到项目副本
   2. 在项目副本文件夹中使用git回退到某个版本
     git reset --hard bd143431c3afd816a477b86dbbc9caeef8a860c5
   3. 把原项目除了.git文件夹统统删掉
   4. 把项目副本除了.git文件夹复制到原项目下
   5. git commit, push…

注意:reset的id不要搞错了,可以理解为git reset到该id的版本,也就是该id的提交时有的。该iid后面的提交没有了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值