git rebase简介(高级篇)

一、基本  
对于 git rebase , 你亦可以选择进行交互式的rebase。这种方法通常用于在向别处推送提交之前对它们进行重写。交互式rebase提供了一个简单易用的途径让你在和别人 分享提交之前对你的提交进行分割、合并或者重排序。在把从其他开发者处拉取的提交应用到本地时,你也可以使用交互式rebase对它们进行清理。
如果你想在rebase的过程中对一部分提交进行修改,你可以在' git rebase '命令中加入' -i' '--interactive '参数去调用交互模式。
$ git rebase -i origin/master
这个命令会执行交互式rebase操作,操作对象是那些自最后一次从origin仓库拉取或者向origin推送之后的所有提交。
若想查看一下将被rebase的提交,可以用如下的log命令:
$ git log github/master..
一旦运行了'rebase -i'命令,你所预设的编辑器会被调用,其中含有如下的内容:

pick fc62e55 added file_size
pick 9824bf4 fixed little thing
pick 21d80a5 added number to log
pick 76b9da6 added the apply command
pick c264051 Revert "added file_size" - not implemented correctly

# Rebase f408319..b04dc3d onto f408319
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
这些信息表示从你上一次推送操作起有5个提交。每个提交都用一行来表示,行格式如下:
(action) (partial-sha) (short commit message)
现在你可以将操作(action)改为' edit '(使用提交,但是暂停以便进行修正)或者' squash '(使用提交,但是把它与前一提交合并),默认是' pick '(使用提交)。你可以对这些行上下移动从而对提交进行重排序。当你退出编辑器时,git会按照你指定的顺序去应用提交,并且做出相应的操作(action)。
二、pick操作
如果指定进行' pick '操作,git会应用这个补丁,以同样的提交信息(commit message)保存提交。
三、squash操作
如果指定进行' squash '操作,git会把这个提交和前一个提交合并成为一个新的提交。这会再次调用编辑器,你在里面合并这两个提交的提交信息。所以,如果你(在上一步)以如下的内容离开编辑器:
pick   fc62e55 added file_size
squash  9824bf4 fixed little thing
squash  21d80a5 added number to log
squash  76b9da6 added the apply command
squash  c264051 Revert "added file_size" - not implemented correctly
你必须基于以下的提交信息创建一个新的提交信息:
# This is a combination of 5 commits.
# The first commit's message is:
added file_size
# This is the 2nd commit message:
fixed little thing
# This is the 3rd commit message:
added number to log
# This is the 4th commit message:
added the apply command
# This is the 5th commit message:
Revert "added file_size" - not implemented correctly
This reverts commit fc62e5543b195f18391886b9f663d5a7eca38e84.
一旦你完成对提交信息的编辑并且退出编辑器,这个新的提交及提交信息会被保存起来。
四、edit操作
如果指定进行' edit '操作, git 会完成同样的工作,但是在对下一提交进行操作之前,它会返回到命令行让你对提交进行修正,或者对提交内容进行修改。
例如你想要分割一个提交,你需要对那个提交指定'edit'操作:
pick   fc62e55 added file_size
pick   9824bf4 fixed little thing
edit    21d80a5 added number to log
pick   76b9da6 added the apply command
pick   c264051 Revert "added file_size" - not implemented correctly
你会进入到命令行,重置(reset)该提交,然后创建两个(或者更多个)新提交。假设提交21d80a5修改了两个文件,file1和file2,你想把这两个修改放到不同的提交里。你可以在进入命令行之后进行如下的操作:
$ git reset HEAD^
$ git add file1
$ git commit 'first part of split commit'
$ git add file2
$ git commit 'second part of split commit'
$ git rebase --continue
现在你有6个提交了,而不是5个。
五、丢弃提交操作
交互式 rebase 的最后一个作用是丢弃提交。如果把一行删除而不是指定' pick '、' squash '和‘ edit ' '中的任何一个,git会从历史中移除该提交。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Git rebaseGit 中用于管理提交历史的一种高级操作,它主要用于将一个分支(或提交链)上的提交重排到另一个分支上,保持提交时间线的线性结构,这样可以更方便地整理代码历史、合并分支,以及创建干净的 Pull Request。 **Git rebase 方法的步骤:** 1. **切换到你要修改的分支**:使用 `git checkout <branch>` 命令切换到你要进行 rebase 的分支。 2. **获取远程分支更新**:确保你的本地分支是最新的,使用 `git fetch` 或 `git pull` 获取远程分支的更新。 3. **开始 rebase**:在你要进行操作的提交上执行 `git rebase <remote>/<branch>`,其中 `<remote>` 是远程仓库名,`<branch>` 是你想应用的远程分支。 4. **编辑和提交**:rebase 会按照新基点重新应用每个提交,你可以查看、修改每次提交的改动,如果满意就使用 `git add` 和 `git commit` 提交,如果不满意可以用 `git reset HEAD~n` 回退到前一个状态,`n` 是你想回退的提交数。 5. **解决冲突**:如果遇到合并冲突,Git 会提示你解决冲突并保存文件。完成后,继续执行 `git rebase --continue`。 6. **完成或交互式模式**:rebase 可能会提示交互式模式,这时你可以手动选择要如何处理每个提交。完成后执行 `git rebase --finish` 结束 rebase。 7. **检查和推送到远程**:最后检查修改是否正确,然后使用 `git push -f`(注意 `-f` 参数表示强制推送,可能需要谨慎使用,因为它会替换远程分支的历史)将新的提交推送到远程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值