Git 操作之rebase、squash

使用git版本控制。

1.从master拉取分支(公司开发从develop拉取分支)。

git checkout -b feature-demo

2.代码编写,提交代码。 
本地开发时,有些功能的开发可能需要几天,为了防止意外情况,尽量一天结束的时候,将未完成的代码提交到属于自己的远程分支。

/**
 * Git Demo
 * @date 2017-11-11 下午10:23
 */
public class GitDemoTest {

    @Test
    public void getCommit() {
        System.out.println("commit1");//git commit1
        System.out.println("commit2");//git commit2
        System.out.println("commit3");//git commit3
    }

}
(1)提交代码:
git add .
git commit
Tip: 如果使用Intellij Idea提交代码,可以使用review功能查看有警告的提示,或者使用阿里代码检查插件进行代码检查,慢慢减少不良的编码习.

rebase 操作:
git rebase origin/master

推送到远程分支:
git push origin feature-demo 

查看远程分支:
git branch -a
  ->
  feature-demo
  master
  remotes/origin/feature-demo
  remotes/origin/master

第二次提交代码:
git add .
git commit
...
第三次提交代码:
git add .
git commit
...

(2)最终提交代码时,需要删除之前的远程分支;使用git squash将多个commit信息合并成一个,并再次提交到远程分支,合并到master上.
删除远程分支:
git push origin --delete feature-demo
git branch -a

git squash操作:
git checkout feature-demo
git rebase -i HEAD~3 

vim操作:   pick ff1abcc git commit1    -> pick ff1abcc git commit1
          pick 5618649 git commit2    -> s ff1abcc git commit2
          pick 5b51a97 git commit3    -> s ff1abcc git commit3

合并提交信息:     # This is a combination of 3 commits. -> # This is a combination of 3 commits.
                # This is the 1st commit message:     -> # This is the 1st commit message:
                git commit1                           -> git commit
                # This is the commit message #2:      -> # This is the commit message #2:
                git commit2                           ->
                # This is the commit message #3:      -> # This is the commit message #3:
                git commit3                           ->


Tip: 合并三次commit成一个,使分支看起来简介,防止rebase时遇到冲突需多次解决冲突的情况)

git push origin feature-demo
git branch -a

3.将远程feature-demo合并到master上。

总结:
(1) 使用git rebase目的:公司项目管理规范要求;梳理git分支树,使分支树看起来简洁。
缺点:rebase时遇到本地feature、远程master、远程feature之间冲突时,解决冲突比较麻烦;如果commit多次,需要解决多次冲突(git merch只需要解决一次),容易导致解决冲突时丢失部分代码。

(2) 使用git squash目的:如果其他同事提交代码到master(develop),你rebase远程master时可能会遇到冲突,使用squash可以使解决冲突“简单化”;频繁commit导致多个无意义提交信息,容易引起他人理解git分支树困惑,使用squash让提交信息准确明了。
缺点:将多次commit信息合并成一个,提交信息的减少导致理解困难,版本回滚会造成麻烦。

说明:“多次commit”的场景在开发时会经常遇到,如完成一天的开发任务,需要提交到远程feature;或者遇到紧急的临时任务,需要切换分支进行开发(Source Tree软件的暂存功能也可以临时储存已经修改但未commit的代码)。

总之,git的使用需要结合公司的具体要求和个人使用习惯,根据具体的应用场景,选择合适的使用方式。
---------------------
原文:https://blog.csdn.net/xiaozhidexiao/article/details/78509676

posted @ 2018-12-25 16:00  舞羊  阅读(2017)  评论(0编辑  收藏  举报