Git 遊戲攻略(上篇)- 基礎&高階&整理提交記錄
一、基礎篇:循序漸進地介紹 Git 主要命令
1. Git Commit
如果說一個專案開發過程中所有的提交記錄構成一個樹,那麼commit 命令就是樹的一個個節點。首先遊戲介面是這樣的,第一關要求我們提交兩次,也就是建立兩個節點。
git commit -m "提交記錄,建立節點c2"
: 執行後就建立了c2節點
git commit -m "提交記錄,建立節點c3"
: 執行後就建立了c3節點
OK ,你成功透過第一副本的第一關卡
2. Git Branch
如果說commit 提交出一個個節點,一直下去,那他就是一柱擎天。樹嘛,總是要開枝散葉,branch 就能讓它發一個枝
git branch bugFix
:這樣我們的樹就在master中發芽了,但也只是萌發
git checkout bugFix
:透過checkout切換到當前枝,然後bugFix枝就可以生長了
雖然關卡,這裡就結束了,不過為了更形象,這裡在bugFix枝中提交一次看看
3. Git Merge
當一個bug被修復後,一條枝的使命就完成了,這時就可以將它合併到主支上。
該副本過程是新建一個分支,然後將其合併到主支上。
git checkout -b bugFix
: 可以直接checkout -b來建立分支並切至
git commit -m "修復bug"
:當bug修復完畢,就可以將其提交
git checkout master
:然後切回主支
git commit -m "bug修復完畢,主線提交"
:在主支提交後出現c3節點
git merge bugFix
: 透過merge命令可以指定分支合併到當前支m主分支會產生c4
4. Git rebase
第二種合併分支的方法是 git rebase。Rebase實際上就是取出一系列的提交記錄,“複製”它們,然後在另外一個地方逐個的放下去。
git checkout -b bugFix git commit -m "修復bug" git checkout master git commit -m "bug修復完畢,主線提交" git checkout bugFix git rebase master
二、高階篇
HEAD 總是指向當前分支上最近一次提交記錄。
1.分離HEAD : 從 bugFix 分支中分離出 HEAD 並讓其指向一個提交記錄
使用checkout 可以切換到一個節點,此時記錄頭HEAD指向該節點
git checkout C4
: 記錄頭HEAD指向C4
雖然該副本就此結束,但是我還是忍不住再提交一個記錄看看,可見生成了C5並且頭下移
2.相對引用^
每個節點都有一個SHA1值與之對應,而我們可以透過該SHA1值回到某個節點,但SHA1太長了,可以使用
^
上移一步。
該副本需要:切換到 bugFix 的父節點,初始如下:
git checkout bugFix^
:切換到 bugFix 的父節點
雖然該副本就此結束,但是我還是忍不住再提交一個記錄看看,可見下該頭之下生成了C5並且頭下移
3.相對引用~
如果要移動多步,用
^
就比較繁瑣,這時可以使用~
來指定上移多少步
該副本需要:移動 HEAD,master 和 bugFix 到目標所示的位置。
可見結果中master指到C6,bugFix移到C0,HEAD指向C1
git branch -f master C6
:會將 master 分支強制指向C6
git checkout HEAD~1
:會將頭標上移一個到C1
git branch -f bugFix HEAD~1
: 會將 bugFix 分支強制指向頭標的上一位,即C0。本關透過。
4.撤銷變更
git reset 透過把分支記錄回退幾個提交記錄來實現撤銷改動(遠端分支是無效) git revert 為了撤銷更改並分享給別人,需要使用 git revert
該副本需要:分別撤銷 local(本地) 分支和 pushed(遠端) 分支上的最近一次提交。 初始如下:
git reset HEAD~1
:local(本地) 分支撤銷一步到達C1
git checkout pushed
:將分支切到pushed(遠端) 分支
git revert HEAD
: 此時 C2' 的狀態與 C1 是相同的,達到撤銷目的
Ok,這樣你就會了Git的90%,就像天才是百分之九十九的努力和百分之一的靈感,然而那百分之一卻是你最大的門檻....
三、整理提交記錄
1.Git cherry-pick
git cherry-pick <提交號>... 如果你想將一些提交複製到當前所在的位置(HEAD)下面的話,記住 cherry-pick
該副本需要: 將三個分支中的提交記錄複製到 master 上,下面看起來挺複雜,不過別怕:
git cherry-pick C3 C4 C7
: 將 C3 C4 C7複製到,當前所在的位置(master)
怎麼樣,就這麼簡單。
2.Git rebase
你知道錄提交記錄的SHA1值時, 用 cherry-pick 再好不過。 but, 但是如果不清楚你想要的提交記錄的雜湊值呢? 記住: rebase 互動式 rebase 指的是使用帶引數 --interactive 的 rebase 命令, 簡寫為 -i 複製程式碼
該副本需要:將C3,C5,C4節點依次複製至C1下
git rebase -i overHere
:就可以開啟一個互動皮膚。
OK ,講得也挺多的,之後的知識。
四、寫個小例子
經過上篇,你一定對git 有所瞭解了,本文不再是攻略,而是一個實際測試:
1.初始化git倉庫
git init mixed
: 將mixed資料夾使用git管理
2.新增檔案到git倉庫
git add HelloWorld.java
:新增檔案,git add .
會新增資料夾內所有檔案
---->[在mixed資料夾建立HelloWorld.java檔案]---- public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }
3.提交檔案到git倉庫
toly:mixed mac$ git commit -m "HelloWorld 初始專案" [master(根提交) 0eb09bc] HelloWorld 初始專案 1 file changed, 7 insertions(+) create mode 100644 HelloWorld.java
git commit -m "提交的描述"
下面是提交後的反饋,0eb09bc
代表唯一的SHA1,用於節點的身份標識
可見第一次提交之後會形成一個master主支和HEAD節點。
在程式碼裡新增一個string2Int的方法,然後進行測試。
public class HelloWorld { public static void main(String[] args) { int result = string2Int("1994"); System.out.println(result); } private static int string2Int(String num) { return Integer.parseInt(num); } }
結果表現良好,現在你要去睡覺了。
每晚躺床第一句,程式碼沒提趕快去
。
看到了節點增加完成,你就安心地睡覺了
toly:mixed mac$ git add . toly:mixed mac$ git commit -m "增加字串轉數字功能" [master 0c4056a] 增加字串轉數字功能 1 file changed, 6 insertions(+), 1 deletion(-)
然後你思來想去,不行,還沒加註釋呢,明早起來看不懂了怎麼辦
public class HelloWorld { public static void main(String[] args) { int result = string2Int("1994");//使用方法 System.out.println(result);//列印 } /** * 將一個字串轉化成數字 * @param num 待轉字串 * @return 數字 */ private static int string2Int(String num) { return Integer.parseInt(num); } }
於是你修改了檔案,新增註釋,再提交,成功出現第三個節點,終於可以安心睡覺了。
toly:mixed mac$ git add . toly:mixed mac$ git commit -m "增加註釋" [master dcf9cd3] 增加註釋 1 file changed, 7 insertions(+), 3 deletions(-)
4.建立分支
這時你發現有bug,轉換"aaa"有異常。修復bug,先建分支,以免改廢了影響主支。
git checkout -b bugFix
,這樣就可以建立分支,並切換到該分支,你就可以愉快地抓小蟲了,用導彈,大炮,原子彈什麼的轟炸bug,都不會影響到你的主支。
toly:mixed mac$ git checkout -b bugFix 切換到一個新分支 'bugFix'
之後經過不懈努力,修復了bug,其間提交了兩次,加了異常捕捉。
toly:mixed mac$ git add . toly:mixed mac$ git commit -m "修復bug提交點1" [bugFix 246b11f] 修復bug提交點1 1 file changed, 13 insertions(+), 5 deletions(-) toly:mixed mac$ git add . toly:mixed mac$ git commit -m "修復bug提交點2" [bugFix f9299a6] 修復bug提交點2 1 file changed, 1 insertion(+)
public class HelloWorld { public static void main(String[] args) { int result = string2Int("1994");//使用方法 System.out.println(result);//列印 } /** * 將一個字串轉化成數字 * @param num 待轉字串 * @return 數字 */ private static int string2Int(String num) { int result =0; try { result = Integer.parseInt(num); } catch (NumberFormatException e) { System.out.println("喵了個咪,給老子傳數字"); e.printStackTrace(); } finally { } return result; } }
5.切換分支與合併分支,檢視分支與刪除分支
現在仍在bugFix分支,既然bug已修復,那就回到master主支繼續開發,並且將bugFix支合併到主支上
toly:mixed mac$ git checkout master 切換到分支 'master' toly:mixed mac$ git merge bugFix 更新 dcf9cd3..f9299a6 Fast-forward HelloWorld.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
透過
git branch
可以檢視當前分支情況,如果想看更多資訊,加-v
toly:mixed mac$ git branch bugFix * master toly:mixed mac$ git branch -v bugFix f9299a6 修復bug提交點2 * master f9299a6 修復bug提交點2
一個bug解決了,該分支也沒有必要了,就可以刪除分支。
toly:mixed mac$ git branch -d bugFix 已刪除分支 bugFix(曾為 f9299a6)。
這樣一套流程下來,bugFix既不會影響主線的程式碼,在bug修復後合併刪除,也就相當於bugFix從未出現過一樣。bug 如此,feature 也一樣,在某種意義上,兩者是非常類似的。(從不寫bug的人,手動滑稽)
6.git reflog 和 git log
如果你想檢視日誌,可以透過
git reflog
或git log
toly:mixed mac$ git reflog f9299a6 (HEAD -> master) HEAD@{0}: merge bugFix: Fast-forward dcf9cd3 HEAD@{1}: checkout: moving from bugFix to master f9299a6 (HEAD -> master) HEAD@{2}: commit: 修復bug提交點2 246b11f HEAD@{3}: commit: 修復bug提交點1 dcf9cd3 HEAD@{4}: checkout: moving from master to bugFix dcf9cd3 HEAD@{5}: commit: 增加註釋 0c4056a HEAD@{6}: commit: 增加字串轉數字功能 0eb09bc HEAD@{7}: commit (initial): HelloWorld 初始專案
toly:mixed mac$ git log commit f9299a6fe2e1e04fe5e334288fee737ebbf8d7b5 (HEAD -> master) Author: toly <1981462002@qq.com> Date: Sat Sep 28 14:45:36 2019 +0800 修復bug提交點2 commit 246b11fac86392f55a83feb41f6e674d644074a3 Author: toly <1981462002@qq.com> Date: Sat Sep 28 14:43:53 2019 +0800 修復bug提交點1 commit dcf9cd3244926e2e3113713bc1465b823038fcdc Author: toly <1981462002@qq.com> Date: Sat Sep 28 14:31:08 2019 +0800 增加註釋 commit 0c4056af93721074324544ba4b562061e442dccd Author: toly <1981462002@qq.com> Date: Sat Sep 28 14:21:11 2019 +0800 增加字串轉數字功能 commit 0eb09bc5abc9c4f42401cf543306fe485e17acfa Author: toly <1981462002@qq.com> Date: Sat Sep 28 14:04:16 2019 +0800 HelloWorld 初始專案
7.版本回溯
git 最強大的功能之一在於可以版本回溯,讓你能在前線奮勇殺敵,沒有後顧之憂。
大不了搞不好,再退回來唄。如果你debug搞得一團糟,輕輕來一句:
git reset --hard 0c4056a
Git還有非常多的特性,這裡主要是想讓你對Git一個形象的認識,後面的路,還要自己走。
。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1868/viewspace-2823806/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- git高階命令學習記錄Git
- Git的修改提交記錄和變基Git
- Git基礎整理Git
- 接上篇:Git Worktree 高階使用,這樣清爽多了Git
- git基礎——記錄每次更新到倉庫Git
- git log檢視提交歷史記錄Git
- 二、GIT基礎-檢視提交歷史Git
- 如何修改git已提交記錄的郵箱?Git
- iOS 模組化進階整理記錄iOS
- 『現學現忘』Git基礎 — 24、Git中檢視歷史版本記錄Git
- 分散式基礎,啥是兩階段提交?分散式
- git-清空歷史提交記錄(保留原倉庫)Git
- js 閉包 基礎 示例 高階JS
- 如何克服解決Git衝突的恐懼症?(Git移交提交記錄)Git
- (CSS學習記錄):CSS高階技巧CSS
- g4e基礎篇#6 瞭解Git歷史記錄Git
- git 修改之前提交記錄的某幾次記錄的賬號和郵箱Git
- git 提交vendor目錄至專案Git
- javascript高階基礎的深入總結JavaScript
- SQL語言基礎(高階查詢)SQL
- Git使用進階:git rebase拆分過去的某次提交Git
- Lua語法基礎教程(上篇)
- Git提交錯了不用慌,這三招幫你修改記錄Git
- Git倉庫的提交記錄亂成一團,怎麼辦?Git
- 面試整理-Java綜合高階篇(吐血整理)面試Java
- Git記錄Git
- git 記錄Git
- Git 基礎Git
- git基礎Git
- Cris 的 Scala 筆記整理(九):物件導向高階筆記物件
- JAVA(一)JAVA基礎/物件導向基礎/高階物件導向Java物件
- 【重溫基礎】21.高階函式函式
- Redis 基礎、高階特性與效能調優Redis
- Redis基礎、高階特性與效能調優Redis
- ios 基礎問題記錄iOS
- SQLL基礎知識記錄SQL
- JAVA基礎-註解記錄Java
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(上篇)Elasticsearch