当前位置: 首页 > 工具软件 > bash-handbook > 使用案例 >

Git | 工程开发HandBook

公良鸿风
2023-12-01

一、rebase

1.1 拉取master合并到自己分支

工作中经常会出现 master 分支有新的 commit,与自己的分支存在冲突,若此时将master分支merge到自己的分支,会在git log中留下一个从master到自己分支的合并(不符合规范且分支会非常乱)那么就需要采用rebase操作将master最新的变更同步到自己的分支;

具体操作:

  1. checkout master 拉到最新代码
  2. checkout 自己分支,将master rebase到本地
    git rebase master 将最新的master代码同步到本地分支
  3. 若存在冲突则可以通过外部工具(如fork、sourceTree)解决冲突,continue rebase
  4. 冲突解决完成 git push 即可

1.2 合并多个commit

当我们在向 master 分支 merge 代码时,保证master分支commit记录干净,尽量使每个功能只有一个commit,此时就需要用到 rebase 的合并commit功能

假设git提交历史如下:

* b1b8189 - (HEAD -> master) Commit-3
* 5756e15 - Commit-2
* e7ba81d - Commit-1
* 5d39ff2 - Commit-0

想要把 e7ba81d(Commit-1)5756e15(Commit-2)b1b8189(Commit-3) 合并到一起,并且只保留 e7ba81d(Commit-1) 的 Git message Commit-1

需要使用 git rebase -i 进行提交合并,后面加的参数应该是 最新的一个想保留的 Commit id

就我们前面提到的那个例子中,这个「最新的一个想保留的 Commit」就是 5d39ff2(Commit-0),于是我们的命令看起来就长这样:

git rebase -i 5d39ff2

// 也可以使用向前找到3个提交的方式 指定该commit
git rebase -i HEAD~3

执行完命令后进入如下界面,选择需要保留的commit message

pick e7ba81d Commit-1
s 5756e15 Commit-2
s b1b8189 Commit-3

# Rebase 5d39ff2..b1b8189 onto 5d39ff2 (3 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
// 常用!使用该 Commit,但会被合并到前一个 Commit 当中
# s, squash = use commit, but meld into previous commit
// 常用!和squash一样,但会丢弃该commit message
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

由于该界面为vim界面,退出需要 :wq
完成后再次查看git log

* 2d7b687 - (HEAD -> master) Commit-1
* 5d39ff2 - Commit-0

此时会出现当前分支落后于remote的提示,不用理会因为我们已经将remote分支的多个提交在本地压缩,直接使用 git push -f ( 大胆使用 -f ) 即可将remote分支的commit也进行压缩

 类似资料: