13 March 2021

参考,部分转载:https://yorkyu.cn/how-to-use-rebase-to-gracefully-fallback-code-08cdafe3d403.html

基本操作概念

  1. Git Revert 使用命令 git revert commit_id 能产生一个 与 commit_id 完全相反的提交,即在 log 中会看到一条新的提交 new_commit_id, revert 提交就是删除 commit_id 的提交。
  2. Git Reset reset 也能使代码回到某次提交,但跟 revert 不同的是, reset 是将提交的 HEAD 指针指到某次提交,之后的提交记录会消失,就像从没有过这么一次提交
  3. Get Rebase rebase 是“变基”的意思,这里的“基”,指[多次] commit 形成的 git workflow,使用 rebase,我们可以改变这些历史提交,修改 commit 信息,将多个 commit 进行组合。

Rebase+Revert回退

  1. 切出一个新分支 feature1 首先,切出一个新分支 feature1,使用 git log 查询一下要回退到的 commit 版本 commit_n
  2. feature1 分支执行命令 git rebase -i commit_n
  3. feature1 合并 commit2 ~ commit4 到最旧的 commit1 上 在合并 commit 时,我们可以选择 pick(p) 最旧的 commit1,然后在后续的 commit_xxx 前添加 squash(s) 命令,将这些 commits 都合并到最旧的 commit1 上。
    pick 6fa5869 commit1
    squash 0b84ee7 commit2
    squash 986c6c8 commit3
    squash 91a0dcc commit4
    
  4. feature1 合并提交记录
    # 执行rebase 生成的新记录
    commit 5
    # 回退代码的版本号
    commit_n
    
  5. feature1 合并 masterfeature1
    由于 feature1 分支落后与 master 分支,因此需要执行 git merge mastermaster 分支向 feature1 分支合并。 合并后 git 会发现 commit1commit4 提交的内容和 feature1 分支上 commit5 的修改内容是完全相同的,会自动进行合并,内容不变,但多了一个 commit5。
    # feature1 分支
    commit 5
    commit 4
    commit 3
    commit 2
    commit 1
    # 回退代码的版本号
    commit_n
    
  6. feature1 分支执行 revert 反提交
    feature1 分支上对 commit5 进行一次 revert 反提交,就实现了把 commit1commit4 的提交全部回退。即撤回步骤5中的合并。
    git revert commit_5
    # 执行rebase 生成的新记录
    commit 5
    # 回退代码的版本号
    commit_n
    
  7. master 分支执行合并feature1master
    master 代码回退,但保留了commit_n, 1,2,3,4,5所有记录
    # 切回到 master
    $ git checkout master
    # 合并 feature1
    $ git merge feature1
    


blog comments powered by Disqus
Flag Counter