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