原理

image.png

使用方法

git rebase -i master
image.png

  1. 调整顺序

image.png

  1. 合并

image.png

  1. 丢弃提交

image.png

应用

  1. 整合提交历史

image.png
例子,修改历史提交信息,修改dit-leetcode为dir-leetcode

  1. demonfox@ubuntu:~/linux-cpp$ git log
  2. commit de88d5a96305a0424734f92278156d9dfd8ab551
  3. Author: 9DemonFox <1196752479@qq.com>
  4. Date: Mon May 23 08:11:49 2022 -0700
  5. -dit-leetcode 增加二叉树相关,以及leetcode1302
  6. commit d720a23e9629347b2f249ec70f984e3f16a68f76
  7. Author: DemonFox <1196752479@qq.com>
  8. Date: Fri May 20 13:34:07 2022 +0800
  9. -dir-leetcode small changes
  10. commit a4f6b9b8d2b29c6a73956d882bd004f99b3bffde
  11. Author: 9DemonFox <1196752479@qq.com>
  12. Date: Thu May 19 22:24:34 2022 -0700
  13. 增加leetcode文件夹用于练习算法
  14. commit 811cd8b86a9a4bab248dbbb41476adbe459e1454
  15. Author: 9DemonFox <1196752479@qq.com>
  16. Date: Sun Mar 27 22:54:35 2022 -0700
  17. 修改oj支持多副本
  18. demonfox@ubuntu:~/linux-cpp$ git rebase -i HEAD~2
  19. Cannot rebase: Your index contains uncommitted changes.
  20. Please commit or stash them.
  21. demonfox@ubuntu:~/linux-cpp$ git commit -m "暂存"
  22. [master eb85efa] 暂存
  23. 20 files changed, 509 insertions(+), 1 deletion(-)
  24. create mode 100644 .clang-format
  25. create mode 100644 leetcode/101Template/main.cpp
  26. create mode 100644 leetcode/4TreeSearch/574/copy.txt
  27. create mode 100755 leetcode/4TreeSearch/574/excute
  28. create mode 100644 leetcode/4TreeSearch/574/inputs/1.txt
  29. create mode 100644 leetcode/4TreeSearch/574/inputs/2.txt
  30. create mode 100644 leetcode/4TreeSearch/574/makefile
  31. create mode 100644 leetcode/4TreeSearch/574/test.cpp
  32. create mode 100644 leetcode/4TreeSearch/993/copy.txt
  33. create mode 100755 leetcode/4TreeSearch/993/excute
  34. create mode 100644 leetcode/4TreeSearch/993/inputs/1.txt
  35. create mode 100644 leetcode/4TreeSearch/993/inputs/2.txt
  36. create mode 100644 leetcode/4TreeSearch/993/inputs/3.txt
  37. create mode 100644 leetcode/4TreeSearch/993/inputs/4.txt
  38. create mode 100644 leetcode/4TreeSearch/993/makefile
  39. create mode 100644 leetcode/4TreeSearch/993/test.cpp
  40. create mode 100644 tricks/bitmap/main.cpp
  41. demonfox@ubuntu:~/linux-cpp$ git rebase -i HEAD~2
  42. Successfully rebased and updated refs/heads/master.
  43. demonfox@ubuntu:~/linux-cpp$ git rebase -i HEAD~2
  44. Stopped at de88d5a96305a0424734f92278156d9dfd8ab551... -dit-leetcode 增加二叉树相关,以及leetcode1302
  45. You can amend the commit now, with
  46. git commit --amend
  47. Once you are satisfied with your changes, run
  48. git rebase --continue
  49. demonfox@ubuntu:~/linux-cpp$ git commit --amend
  50. [detached HEAD 1c7b9d3] -dir-leetcode 增加二叉树相关,以及leetcode1302
  51. Date: Mon May 23 08:11:49 2022 -0700
  52. 10 files changed, 220 insertions(+), 1 deletion(-)
  53. create mode 100644 leetcode/4TreeSearch/1302/copy.txt
  54. create mode 100755 leetcode/4TreeSearch/1302/excute
  55. create mode 100644 leetcode/4TreeSearch/1302/inputs/1.txt
  56. create mode 100644 leetcode/4TreeSearch/1302/makefile
  57. create mode 100644 leetcode/4TreeSearch/1302/test.cpp
  58. create mode 100644 leetcode/tools/bitree.cpp
  59. create mode 100644 leetcode/tools/bitree.h
  60. create mode 100644 leetcode/tools/makefile
  61. create mode 100644 leetcode/tools/utest_bitree.cpp
  62. demonfox@ubuntu:~/linux-cpp$ git rebase --continue
  63. Successfully rebased and updated refs/heads/master.
  64. demonfox@ubuntu:~/linux-cpp$ git log
  65. commit f7901179dec12c478e55b4563eebe07ba5816487
  66. Author: 9DemonFox <1196752479@qq.com>
  67. Date: Mon May 30 09:44:40 2022 -0700
  68. 暂存
  69. commit 1c7b9d36eb73e3a23e1ba36273394627a90a9646
  70. Author: 9DemonFox <1196752479@qq.com>
  71. Date: Mon May 23 08:11:49 2022 -0700
  72. -dir-leetcode 增加二叉树相关,以及leetcode1302
  73. commit d720a23e9629347b2f249ec70f984e3f16a68f76
  74. Author: DemonFox <1196752479@qq.com>
  75. Date: Fri May 20 13:34:07 2022 +0800
  76. -dir-leetcode small changes
  77. commit a4f6b9b8d2b29c6a73956d882bd004f99b3bffde
  78. Author: 9DemonFox <1196752479@qq.com>
  79. Date: Thu May 19 22:24:34 2022 -0700
  80. 增加leetcode文件夹用于练习算法
  81. :...skipping...
  82. commit f7901179dec12c478e55b4563eebe07ba5816487
  83. Author: 9DemonFox <1196752479@qq.com>
  84. Date: Mon May 30 09:44:40 2022 -0700
  85. 暂存
  86. commit 1c7b9d36eb73e3a23e1ba36273394627a90a9646
  87. Author: 9DemonFox <1196752479@qq.com>
  88. Date: Mon May 23 08:11:49 2022 -0700
  89. -dir-leetcode 增加二叉树相关,以及leetcode1302
  90. commit d720a23e9629347b2f249ec70f984e3f16a68f76
  91. Author: DemonFox <1196752479@qq.com>
  92. Date: Fri May 20 13:34:07 2022 +0800
  93. -dir-leetcode small changes
  94. commit a4f6b9b8d2b29c6a73956d882bd004f99b3bffde
  95. Author: 9DemonFox <1196752479@qq.com>
  96. Date: Thu May 19 22:24:34 2022 -0700
  97. 增加leetcode文件夹用于练习算法
  98. commit 811cd8b86a9a4bab248dbbb41476adbe459e1454
  99. Author: 9DemonFox <1196752479@qq.com>
  100. Date: Sun Mar 27 22:54:35 2022 -0700
  101. 修改oj支持多副本
  102. commit 45b5f505488194edd413ce799425bf84ee270eb8
  103. Author: 9DemonFox <1196752479@qq.com>
  104. Date: Sun Mar 27 10:59:40 2022 -0700
  105. 增加oj,方便练习题目
  106. commit 039b2b1cc736a9ccc4a205444914a5419def6345
  107. Author: 9DemonFox <1196752479@qq.com>
  108. demonfox@ubuntu:~/linux-cpp$

整理分支后通常需要使用git push -f来覆盖远程分支

有两种情况下适合使用这个命令:

确定需要覆覆盖提交,就像上面的那种情况,在明确部分提交会导致异常时,可以使用新的提交去覆盖。
需要整理历史提交记录时,有时候项目的 Commit Logs 可能比较乱,不能清晰的看出每一次提交的作用,可以使用 rebase 命令来清理历史提交记录。因为改变了历史,所以正常来说是 push不成功的,所以需要使用 force push来解决这个问题。