摘要: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往往你想要查詢某段**、某個函式、乙個常量、乙個檔案,但是卻找不到了。它被刪除了,什麼時候刪除的?這個小技巧能搜尋整個版本庫中git diff資訊,可能會花些時間,但是非常有用:--diff-filter=d
--summary | grep delete
git rev-list --all | (從另乙個版本庫中cherry-pick一條提交記錄,首先需要將那個版本庫作為乙個遠端版本庫新增進來,並fetch其變化,然後cherry-pick其提交記錄。while read revision; do
git grep -f 'your search string' $revision
done
)
如果你追求速度,也可以使用這個未經優化的命令:
git有時候你會在better_brach上工作一段時間,並準備將其設為新的master,你會怎麼做?--git-dir
=../some_other_repo/.git format-patch -k -1 --stdout
<
commit
sha>
| git am -3 -k
這裡是stack overflow上提供的常規解決方案:
1.切換到better_brach分支:
git checkout better_branch2.保留better_branch分支全部內容,但是記錄合併:
git merge3.切回mater--strategy
=ours
master
git checkout master4.快速合併
git merge better_branch5.如果你想讓合併步驟變得更清晰,可以新增commit資訊。只需要修改下第二步:
git merge這樣會重寫歷史記錄,所以只能在未和任何人分享前做,否則將可能把同事者的檔案破壞。--strategy
=ours
--no-commit master
git commit # here add your custom message to the commit template
1.建立乙個新的空分支,例如:newroot
git checkout --orphan newroot2.建立空的commitgit rm --cached -r .
git clean -f -d
git commit --allow-empty -m '[empty] initial commit'3.重新傳送分支的全部內容
git rebase --onto newroot --root master4.刪除臨時分支newroot
git branch -d newroot現在master就已經包含了乙個空的root commit了。
有時候你會想要從某個分支重新開始,或者打算保留一些邏輯上和主幹相關但是跟蹤另乙個跨職能方面的**,就像github專案的gh-pages。
但如果你只想重新開始某個分支,清空所有歷史記錄呢?
1.檢出(checkout)乙個分支:
git checkout -b branch_to_zero2.跟上條一樣,先建立增加乙個初始的空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...