12個git實戰建議和技巧

2021-07-03 17:44:19 字數 4039 閱讀 4183

摘要:git無疑是現在最熱門的版本控制工具,而且正在進一步侵占svn以及cvs的市場。本文作者從國外技術問答社群stack overflow整理的12個很實用的git使用技巧和建議,希望對你有幫助。

用git diff經常會出現很多內容,導致很多內容被遮住了,讓人很是苦惱,幸運的是這裡有個解決方案。

如果你使用less作為預設的pager,只需要輸入-s,就可以保證不會被diff刷屏了。

或者,你也可以使用git config設定pager來達到同樣的效果:

為當前專案設定pager:

$ git config core.pager 'less -r'  

再將pager設定的作用域設定為整個專案:

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

在某些網路環境下,你可能需要為git配置**,這很簡單,只需要一行命令就可以了:

在某些大型專案中,或者只是圖方便,有時候你可能只希望clone某個分支,你可以這樣做:

mkdir $branch 

cd $branch 

git init 

git remote add -t $branch -f origin $remote_repo 

git checkout $branch 

很簡單:

git diff localbranch remotebranch filepath 

也許你是想將其恢復,因此需要仔細確認某些merge操作,無論如何,列出版本庫中所有已刪除的檔案會非常有幫助。你只需要這樣做:

git log 

--diff-filter=d

--summary 

如果你想將其恢復,參照這裡。

如果你不想知道是哪次commit中刪除的,只需要新增乙個grep delete。

git log 

--diff-filter=d

--summary | grep delete 

往往你想要查詢某段**、某個函式、乙個常量、乙個檔案,但是卻找不到了。它被刪除了,什麼時候刪除的?這個小技巧能搜尋整個版本庫中git diff資訊,可能會花些時間,但是非常有用:

git rev-list --all | ( 

while read revision; do 

git grep -f 'your search string' $revision 

done 

)

從另乙個版本庫中cherry-pick一條提交記錄,首先需要將那個版本庫作為乙個遠端版本庫新增進來,並fetch其變化,然後cherry-pick其提交記錄。

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

git 

--git-dir

=../some_other_repo/.git format-patch -k -1 --stdout 

<

commit

sha>

| git am -3 -k 

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

這裡是stack overflow上提供的常規解決方案:

1.切換到better_brach分支:

git checkout better_branch 

2.保留better_branch分支全部內容,但是記錄合併:

git merge 

--strategy

=ours

master 

3.切回mater

git checkout master 

4.快速合併

git merge better_branch 

5.如果你想讓合併步驟變得更清晰,可以新增commit資訊。只需要修改下第二步:

git merge 

--strategy

=ours

--no-commit master 

git commit # here add your custom message to the commit template 

這樣會重寫歷史記錄,所以只能在未和任何人分享前做,否則將可能把同事者的檔案破壞。

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

git checkout --orphan newroot 

git rm --cached -r . 

git clean -f -d 

2.建立空的commit

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

3.重新傳送分支的全部內容

git rebase --onto newroot --root master 

4.刪除臨時分支newroot

git branch -d newroot 

現在master就已經包含了乙個空的root commit了。

有時候你會想要從某個分支重新開始,或者打算保留一些邏輯上和主幹相關但是跟蹤另乙個跨職能方面的**,就像github專案的gh-pages。

但如果你只想重新開始某個分支,清空所有歷史記錄呢?

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

git checkout -b branch_to_zero 

2.跟上條一樣,先建立增加乙個初始的空commit,之後就可以通過重新設定來清空乙個分支。

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

git reset --hard initial_commit 

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

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

$git rebase bbc643cd^ --interactive  

在預設的編輯器中選擇並修改你期望修改的,然後儲存修改並輸入:

$ git add 

<

filepattern

>

現在你就可以使用

$git commit --amend 

來修改commit,之後使用

$ git rebase --continue  

返回之前最新的commit。

git stash --keep-index命令可以用來隱藏上次commit中沒有add的東西,之後add想要提交的檔案並執行相應命令就可以了。

按照下面的提示,你可以把一條老的commit提交到多個變更集中:

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

git rebase -i last_good_commit 

將某些變化標記為edit:

git reset head^ 

git add file1 file2 file3 

新增相應的檔案:

git add file1 file2 file3 

因此之前沒有新增的檔案:

git stash --keep-index 

別忘了收尾:

git commit 

git stash pop 

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

git rebase --continue 

iOS應用效能調優的25個建議和技巧 12

12.處理記憶體警告 一旦系統記憶體過低,ios會通知所有執行中 在官方文件中是這樣記述 如果你的 object 和其他一些可以重建立的 objects 的strong references.幸運的是,uikit 提供了幾種收集低記憶體警告的方法 在中使用 的方法 在你的自定義 uiviewcont...

解決 Git 衝突的 14 個建議和工具

git 非常善於合併 的合併在本地完成,快速而且靈活。正常情況下每次從不同分支合併內容時,衝突有可能會發生。通常解決衝突很簡單,就如同知道 如何 選擇 保留 重要的更改一樣,而有時解決衝突則需要額外的工作。每個開發者對於解決衝突有不同的偏好。不久前,一位叫丹 史蒂文斯的同事用內部軟體 questio...

iOS應用效能調優的25個建議和技巧 4

4.避免過於龐大的 xib ios5 中加入的 storyboards 分鏡 正在快速取代 xib。然而 xib在一些場景中仍然很有用。比如你的 需要適應 ios5 之前的裝置,或者你有乙個自定義的可重用的 view,你就不可避免地要用到他們。如果你不得不 xib的話,使他們盡量簡單。嘗試為每個 c...