(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