Git命令-rebase和merge的区别

 编写: zhangyue
 时间: 2017-02-23
 说明: git的一些命令使用

1 merge和rebase的区别
merge:合并两个分支,根据两个分支的同一个起点,同相同起点开始,把两个分支的修改进行合并,之后生成生成一个commit。
rebase:合并两个分支,抽取出当前的分支的commit, 之后合并目标分支commit,再将置顶抽出的commit重新合并入当前分支的commit

2 两者合并的示意图

merge:
    master: master:1 -- master:2
                                 |
    dev   :     |-- dev:1 --- dev:2 执行git merge master

    dev的log:
    dev   : master:1 --> dev:1 --> dev:2 --> master:2 --> merge commit

rebase:
    master: master:1 -- master:2
                                 |
    dev   :     |-- dev:1 -- dev:2 执行git rebase master

    dev的log:
    dev   : master:1 --> master:2 --> dev:1 --> dev:2

3 在发生冲突时两者的不同处理方式
merge: 有冲突->停止合并->手动解决后->再次merge
rebase:有冲突->暂停操作->手动解决,
git rebase --continue继续(--skip跳过/--abort 停止rebase操作)
4 rebase对commit的操作

git rebase -i HEAD~3 对所做的提交进行修改
    # Commands:
    # p, pick = use commit 不做任何修改
    # r, reword = use commit, but edit the commit message 只修改提交注释信息
    # e, edit = use commit, but stop for amending 
        修改提交的文件,做增补提交
    # s, squash = use commit, but meld into previous commit
        将该条提交合并到上一条提交,提交注释也一并合并
    # f, fixup = like "squash", but discard this commit's log message
        将该条提交合并到上一条提交,废弃该条提交的注释
    # x, exec = run command (the rest of the line) using shell
    # d, drop = remove commit
        删除某次提交

5 其他的一些功能命令

    git cherry-pick  取某一个分支中的一个或几个commit(s)来进行合并
    git stash [pop/apply /drop/save] 将改动存入暂存区[弹出暂存区记录/恢复一个暂存区内记录]
    git blame 文件逐行追溯
    git clean 清除工作区未跟踪文件

发表评论