Git 遊戲攻略(上篇)- 基礎&高級&整理提交記錄

一個學習git的網站,本文即是攻略。看一個個對話框也怪費時間的,整理一篇出來,看得清晰點。java

1、基礎篇:按部就班地介紹 Git 主要命令

1. Git Commit

若是說一個項目開發過程當中全部的提交記錄構成一個樹,那麼commit 命令就是樹的一個個節點。首先遊戲界面是這樣的,第一關要求咱們提交兩次,也就是建立兩個節點。git


git commit -m "提交記錄,建立節點c2": 執行後就建立了c2節點bash


git commit -m "提交記錄,建立節點c3": 執行後就建立了c3節點markdown

OK ,你成功經過第一副本的第一關卡oop


2. Git Branch

若是說commit 提交出一個個節點,一直下去,那他就是一柱擎天。樹嘛,老是要開枝散葉,branch 就能讓它發一個枝post


git branch bugFix:這樣咱們的樹就在master中發芽了,但也只是萌發學習


git checkout bugFix:經過checkout切換到當前枝,而後bugFix枝就能夠生長了測試


雖然關卡,這裏就結束了,不過爲了更形象,這裏在bugFix枝中提交一次看看網站


3. Git Merge

當一個bug被修復後,一條枝的使命就完成了,這時就能夠將它合併到主支上。
該副本過程是新建一個分支,而後將其合併到主支上。spa


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
複製代碼


2、高級篇

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%,就像天才是百分之九十九的努力和百分之一的靈感,然而那百分之一倒是你最大的門檻....


3、整理提交記錄

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 ,講得也挺多的,以後的知識。下篇見,Bye。之前也寫過一篇:雜篇:一首詩認識[- Git -]


4、寫個小例子

通過上篇,你必定對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 refloggit 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一個形象的認識,後面的路,還要本身走。

相關文章
相關標籤/搜索