Git學習札記——進階

(1)git blame 文件名

該命令會顯示出該文件名的創建者,以及最後的提交和時間戳。

(2)git reflog

該命令顯示的是head指針移動的信息。他是在本地的,而不是你倉庫的一部分。不會包含在push和merge中。如果我使用git log ,我得到的提交信息是我倉庫的一部分。


(3)git stash 

把你當前在工作區中的修改暫時保存起來。然後工作區恢復到上一次提交時的狀態。你可以去進行其他的工作了。

git stash list

顯示當前工作區中包含的stash。

git stash pop

恢復工作區的修改,同時刪除標識符。



(4)cat ~/.gitconfig

查看當前git的用戶名和郵箱;

(5)git取消工作區的修改(還未add,commit)

當我們在編寫代碼過程中,可能由於某種原因,我們想要回退到最初的修改之前,那麼應該怎麼做呢?有兩種方法:

【第一種方法】

1.git status

顯示哪些文件被修改了。

2.git checkout -- 文件名

放棄工作區的修改。(可以選擇哪些文件要回退,哪些文件要保留修改)。


【第二種方法】

1.git reflog

查看每次提交的信息。

2.git reset --hard [commit版本值]

強制回退到上一次commit版本。(放棄項目中所有文件的修改,完全回退到上一個commit版本)。可以加[commit版本值],可以回退到任意版本。 不加[commit版本值],默認回退到上一個版本。



(6)git 取消工作區的修改(已經add,還未commit)

此時我們已經把一些修改add到了本地暫存區中了,但是發現這些修改是沒有必要的。要進行回退。有兩種方法:

【第一種方法】

1.git reset HEAD  [文件名]

清空本地暫存區。後面可以加上文件名,也可以不加文件名。當指定文件名時,也就是從暫存區清空該文件的修改。當使用"git reset HEAD",也就是清空所有文件的修改。相當於工作區修改了,但是還未add ,還未commit。

2.如果還想回滾到上一次commit,請參考(5)。


【第二種方法】

1.git reflog

顯示每次提交的信息。

2.git reset --hard [commit版本值]

回退到任意次提交的版本。從這裏可以看到,“git reset --hard commit版本”這個命令在任何時候都是可以使用的,不管你把工作區或者暫存區如何修改,直接使用這個命令就可以回退到任何版本。很強大,也要小心。



(7)git rm 文件名

刪除文件跟蹤,並且刪除該文件。


(8)git rm --cached 文件名

刪除文件跟蹤,但是不刪除該文件。



(9)解決衝突


其中<<<<<<(7個<)和=======(7個=)之間是我修改的。=======和>>>>>>>之間是別人修改的。發現衝突,我們只需要修改衝突,重新走一遍提交流程就好了。


(10)不順利的代碼提交

你在git push 時可能會失敗,可能是因爲別人提交了新代碼,而你的代碼和別人的代碼衝突了。你需要先git pull,在本地修改衝突代碼後,再add-->commit-->push流程。


(11)修改分支名稱

可能由於某種原因,你想要修改一個分支的名稱,當然除了master之外。 

git branch -m 舊分支名 新分支名



(12)git clone -b 分支名 倉庫名

比如:

git clone -b version1.4 Myrepo

由於項目版本的迭代,我們一般開發一個新版本的時候都會新建一個分支,團隊成員都會從該新分支進行檢出或克隆,就會使用該命令。


(13)衝突解決:衝突代碼如下:

<<<<<<< HEAD

test in master

=======

test in dev

>>>>>>> dev


理解:

<<<<<<<  :標記衝突的開始,後面跟的是當前分支中的內容(也可以理解爲是你改動的代碼)。

HEAD: 指向當前分支的提交。

======之後,>>>>>>>之前是要merge過來的另一條分支上的代碼(也可以理解爲是別人改動的代碼)。

>>>>>>> :標記衝突的結束,後面的dev是別人分支的名字。

你只要根據需求修改衝突的代碼,然後繼續add ,commit ,push即可。最好是在Push之前首先pull,讓衝突在本地進行解決。



(14)git clone 遠程所有分支(這裏有點麻煩,我準備細講一下)。

git clone 倉庫url  :只能clone遠程倉庫的master分支,無法clone所有的分支。如果我們想要倉庫中的所有分支,解決方案如下:

1. git clone 倉庫url   ;

2. git branch -a    :查看所有分支 :

*master

remotes/origin/dev

remotes/origin/master


瞭解下:master[本地主分支]、origin/master[遠程主分支]、origin/dev[遠程開發分支]

clone下來的代碼默認master和origin/master是關聯的,也就是他們的代碼保持同步。但是origin/dev分支在本地沒有任何的關聯。

可以看到遠程倉庫其實還有dev分支,但是本地沒有該分支。

3. git checkout -b dev origin/dev   :在本地新建dev分支,並checkout遠程的dev分支(和遠程的origin/dev分支關聯),並切換到到dev分支上;


(15)git diff 提交版本哈希值:文件名 提交版本哈希值:文件名

比較不同提交版本中兩個文件的差異, 版本哈希值可以通過git log命令來獲取,文件名需要的是相對路徑。


(16)git log 文件名

查看某個文件的修改記錄,文件名需要的是相對路徑。


(17)git show 提交版本哈希值

查看某一次提交的所有修改內容,哈希值可以通過git log來獲取。


(18)git config --list

查看當前git中的用戶名和密碼。


(19)git config --global user.name "chenyufeng"

git config --global user.email "[email protected]"

添加修改Git的用戶名和密碼,加上--global參數表示是全局設置。注意修改也可以用該命令。


(20)下圖是Git的使用規範流程,是我從網上找的圖,畫得很清晰:




合理正確的流程:

本地要有一個分支A和遠端的分支保持對應。

然後本地新開分支B開發,提交記錄。

如果需要將代碼推送到遠端的話,就切換到A,首先在A分支上pull同步遠端的代碼。

然後將分支B上的開發代碼merge到分支A上。

然後再往服務器端推送。


(21)新建分支:每次開發新功能,都應該新建一個單獨的分支。

#獲取主幹最新代碼

$ git checkout master

$ git pull


# 新建一個開發分支myfeature

$ git checkout -b myfeature


(22)與主幹同步:分支的開發過程中,要經常與主幹保持同步。

$ git fetch origin

$ git rebase origin/master




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章