git 如何撤销 git workflow中的某次提交或者某次merge

  在团队协作开发过程中经常出现这种情况:可能不小心合入错误的代码,可能合并之后发现,合入的代码有问题,但是已经有新的提交加入,如何操作?

一般使用三种方法:

  1. revert 执行撤销操作,git revert <commit>: 可以执行单个撤销,还有一系列提交,git revert <commit id1>..<commit id2>(前开后闭)。例如:

    git revert --no-commit s32342d..23wsd23  # --no-commit 把提交放到最后一起进行手动提交
    git commit -a -m 'revert commit from s32342d to  23wsd23'

    即:移除 s32342d 后的到 23wsd23 的所有版本。HEAD 上火多去一个提交:revert commit from s32342d to 23wsd23

    • 特点:不需要其他分支配置,不改变本分支的以前的工作流,只做新增操作,非常适用于有保护的分支 
  2. 通过 rebase drop 某次提交
    1. 找到要撤销提交的前一次提交:commit_id
    2. 使用 git rebase -i commit_id 修改,把 commit_id 前的pick 改为 drop
    3. 保存退出
    4. git push -f

    特点:操作简单,但是改变会改动工作流

      3. 通过 rebase, git cherry-pick

    1. 对要撤销后的commit,rebase 合并成一次提交 commit_id
    2. 在撤销commit前的次节点,拉出新分支
    3. 新分支tmp合入 commit_id
    4. 原分支执行版本回退,
    5. 合并tmp
    6. git push -f

    特点:操作复杂,会改动工作流,但是由于新建分支,过程中减少出错对原分支的影响   

猜你喜欢

转载自www.cnblogs.com/spaceapp/p/12170123.html
今日推荐