12個git實戰建議和技巧

摘要:git無疑是如今最熱門的版本控制工具,並且正在進一步侵佔SVN以及CVS的市場。本文做者從國外技術問答社區Stack Overflow整理的12個很實用的git使用技巧和建議,但願對你有幫助。

1.使用「git diff」來摺疊多行


用git diff常常會出現不少內容,致使不少內容被遮住了,讓人非常苦惱,幸運的是這裏有個解決方案。html

若是你使用less做爲默認的pager,只須要輸入-s,就能夠保證不會被diff刷屏了。git

或者,你也可使用git config設置pager來達到一樣的效果:網絡

爲當前項目設置pager:less

  1. $ git config core.pager 'less -r'  

再將pager設置的做用域設置爲整個項目:編輯器

  1. $ git config --global core.pager 'less -r'  

2.設置全局代理


在某些網絡環境下,你可能須要爲git配置代理,這很簡單,只須要一行命令就能夠了:函數

  1. git config --global https.proxy https://user:password@address:port 

3.clone某個特定分支


在某些大型項目中,或者只是圖方便,有時候你可能只但願clone某個分支,你能夠這樣作:工具

  1. mkdir $BRANCH 
  2. cd $BRANCH 
  3. git init 
  4. git remote add -t $BRANCH -f origin $REMOTE_REPO 
  5. git checkout $BRANCH 

4.比較某個文件和遠程分支上的區別


很簡單:學習

  1. git diff localbranch remotebranch filepath 

5.列出版本庫中全部已刪除的文件


也許你是想將其恢復,所以須要仔細確認某些merge操做,不管如何,列出版本庫中全部已刪除的文件會很是有幫助。你只須要這樣作:fetch

  1. git log --diff-filter=D --summary 

若是你想將其恢復,參照這裏優化

若是你不想知道是哪次commit中刪除的,只須要添加一個grep delete。

  1. git log --diff-filter=D --summary | grep delete 

6.在版本庫全部版本中搜尋一條字符串


每每你想要查找某段代碼、某個函數、一個常量、一個文件,可是卻找不到了。它被刪除了,何時刪除的?這個小技巧能搜索整個版本庫中git diff信息,可能會花些時間,可是很是有用:

  1. git rev-list --all | ( 
  2.     while read revision; do 
  3.         git grep -F 'Your search string' $revision 
  4.     done 

7.應用另一個(不相關的)本地版本庫中的patch


從另外一個版本庫中cherry-pick一條提交記錄,首先須要將那個版本庫做爲一個遠程版本庫添加進來,並fetch其變化,而後cherry-pick其提交記錄。

若是你追求速度,也可使用這個未經優化的命令:

  1. git --git-dir=../some_other_repo/.git format-patch -k -1 --stdout <commit SHA>| git am -3 -k 

8.重新的主幹中分出一個新分支


有時候你會在better_brach上工做一段時間,並準備將其設爲新的master,你會怎麼作?

這裏是Stack Overflow上提供的常規解決方案:

1.切換到better_brach分支:

  1. git checkout better_branch 

2.保留better_branch分支所有內容,可是記錄合併:

  1. git merge --strategy=ours master 

3.切回mater

  1. git checkout master 

4.快速合併

  1. git merge better_branch 

5.若是你想讓合併步驟變得更清晰,能夠添加commit信息。只須要修改下第二步:

  1. git merge --strategy=ours --no-commit master 
  2. git commit # Here add your custom message to the commit template 

9.向分支提交一個初始的空commit,保證徹底復位


這樣會重寫歷史記錄,因此只能在未和任何人分享前作,不然將可能把同事者的文件破壞。

1.建立一個新的空分支,例如:newroot

  1. git checkout --orphan newroot 
  2. git rm --cached -r . 
  3. git clean -f -d 

2.建立空的commit

  1. git commit --allow-empty -m '[empty] initial commit' 

3.從新發送分支的所有內容

  1. git rebase --onto newroot --root master 

4.刪除臨時分支newroot

  1. git branch -d newroot 

如今master就已經包含了一個空的root commit了。

10.清空一個分支來作些不一樣的事


有時候你會想要從某個分支從新開始,或者打算保留一些邏輯上和主幹相關可是跟蹤另外一個跨職能方面的代碼,就像GitHub項目的gh-pages。

但若是你只想從新開始某個分支,清空全部歷史記錄呢?

1.檢出(checkout)一個分支:

  1. git checkout -b branch_to_zero 

2.跟上條同樣,先創建增長一個初始的空commit,以後就能夠經過從新設置來清空一個分支。

3.使用hard重置分支到剛剛建立的初始commit:

  1. git reset --hard initial_commit 

11.如何修改一個特定的commit?


當你想在推送前重作你最後的commit時,可使用修改命令(git commit --amend)。若是你想修改的不是最後一個commit呢?

這種狀況下,你可使用git rebase,例如,你想要修改bbc643cd commit,運行下面的命令:

  1. $git rebase bbc643cd^ --interactive  

在默認的編輯器中選擇並修改你指望修改的,而後保存修改並輸入:

  1. $ git add <filepattern>  

如今你就可使用

  1. $git commit --amend 

來修改commit,以後使用

  1. $ git rebase --continue  

返回以前最新的commit。

12.如何隱藏多個已修改文件中一個?


git stash --keep-index命令能夠用來隱藏上次commit中沒有add的東西,以後add想要提交的文件並運行相應命令就能夠了。

按照下面的提示,你能夠把一條老的commit提交到多個變動集中:

互動地rebase最後一條好的commit:

  1. git rebase -i last_good_commit 

將某些變化標記爲edit:

  1. git reset HEAD^ 
  2. git add file1 file2 file3 

添加相應的文件:

  1. git add file1 file2 file3 

所以以前沒有添加的文件:

  1. git stash --keep-index 

別忘了收尾:

  1. git commit 
  2. git stash pop 

有必要的話,重複第二步以後的步驟:

  1. git rebase --continue 

原文連接:durdn.com

 

Git版本控制軟件結合GitHub從入門到精一般用命令學習手冊http://www.ihref.com/read-16369.html

相關文章
相關標籤/搜索