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的使用需要結合公司的具體要求和個人使用習慣,根據具體的應用場景,選擇合適的使用方式。
相關文章
- 一種邪道的 Git 整潔之法——rebase & squashGit
- git 命令之git rebase 用法&git rebase介紹Git
- git學習之git rebaseGit
- Git基礎命令之git rebase命令Git
- [Git]rebaseGit
- Git -- RebaseGit
- git rebaseGit
- Git教程十九:分支管理之RebaseGit
- git merge & git rebaseGit
- git rebase masterGitAST
- git rebase 流程Git
- Git——rebase命令Git
- git rebase -iGit
- git rebase命令Git
- git rebase 和 git mergeGit
- git rebase的使用Git
- 如何理解git rebase?Git
- [Git] Git整理(四) git rebase 的使用Git
- git rebase --onto詳解Git
- 【Git】rebase 用法小結Git
- git rebase 使用詳解Git
- Git rebase 與 Git merge 的使用Git
- git rebase vs git merge詳解Git
- git merge 和 git rebase 小結Git
- Git 由淺入深之細說變基 (rebase)Git
- git revert .vs. git reset .vs. git rebaseGit
- git-rebase進階使用Git
- 徹底搞懂 Git-RebaseGit
- 撤銷rebase與git原理Git
- git reset rebase 用法總結Git
- git rebase簡介(基本篇)Git
- git分支合併與rebaseGit
- 學會使用 git-rebaseGit
- git merge 與 git rebase的區別Git
- 淺談git rebase和git checkout –ours(theirs)Git
- git rebase(變基)—— Git 學習筆記 19Git筆記
- 詳解git rebase,讓你走上git大神之路Git
- git rebase --onto 的奇妙用法Git