2011年6月8日 星期三

diff , ignore white space

如果有人改了 white space 的數量,或是以 white space 來代替 tab, diff 的結果就會一團亂。

這時候可以下
git diff -w
來忽略 white space.

如果是在 difftool 模式 (invoke vimdiff),就要在 vi 裡下 command:
:set diffopt+=iwhite



ref: http://stackoverflow.com/questions/1265410/is-there-a-way-to-configure-vimdiff-to-ignore-all-whitespaces

ref: http://myvicommandhelp.blogspot.com/2011/06/diff-ignore-white-space.html

2011年5月15日 星期日

format-patch & am

在作 rebase, merge 的時後,fail 得太嚴重。所以希望手動來作。
手動作 rebase.. 好確保每個 commit 一一個上去。

可以用git format-patch 'rev-name'產生一堆從 'rev-name' 開始的patch , 一個 commit,一個 patch。

有這些patch檔,就可以用git am 'patch-filename'一個一個上回去。
這樣產生的 patch file 和 am 後的 rev ,會把 commit log 也保留住。

如果一次要全上,可以用: git am *.patch
會自動依照 001, 0002. 003 的順序 patch .

format-patch 可以加 option '-3' 表示 只要該rev 後的三個 patch



ref:
http://gitready.com/intermediate/2009/03/04/pick-out-individual-commits.html

2011年5月5日 星期四

revert/undo rebase

rebase 後發現 fail,要 rollback 怎辦?

列出 reflog,用 git log 找出 rebase 之前的那個 head 是哪一個,然後用 reset --hard 切過去。

git reflog
afa93f0 HEAD@{0}: rebase: tidy up the driver/misc/Makefile, keeps the 9.4 kernel content, just append the new source added by us
7a3b48e HEAD@{1}: checkout: moving from rtk2 to 7a3b48ec1ba6eee2298ee654c0cee1e06f464fed^0
f4fbe68 HEAD@{2}: checkout: moving from rtk to rtk2
6d5d23c HEAD@{3}: checkout: moving from rtk to rtk
6d5d23c HEAD@{4}: checkout: moving from rtk2 to rtk
f4fbe68 HEAD@{5}: checkout: moving from debug_suspend_wakeup to rtk2
4c13583 HEAD@{6}: commit: add more comment : wake_lock_internal & alarm.c
d8cf098 HEAD@{7}: rebase: add a lot message to trace the lock sequence
fe3b73a HEAD@{8}: rebase: use external sd as boot
f4fbe68 HEAD@{9}: checkout: moving from debug_suspend_wakeup to f4fbe680ef41ed3d38ecc1f49a8b2c32a294c178^0
733e20f HEAD@{10}: checkout: moving from rtk2 to debug_suspend_wakeup
f4fbe68 HEAD@{11}: commit: tidy up the driver/misc/Makefile, keeps the 9.4 kernel content, just append the new source added by us
6d5d23c HEAD@{12}: checkout: moving from rtk to rtk2
6d5d23c HEAD@{13}: checkout: moving from imx_r9.4 to rtk
901321c HEAD@{14}: checkout: moving from rtk to imx_r9.4
6d5d23c HEAD@{15}: checkout: moving from 37bace68774d42fc2bea3b2aa2fb8aafb3a6f5a0 to rtk
37bace6 HEAD@{16}: checkout: moving from rtk to 37bace68774d42fc2bea3b2aa2fb8aafb3a6f5a0
6d5d23c HEAD@{17}: checkout: moving from debug_suspend_wakeup to rtk

reflog 會列出每次 operation, HEAD 變動的 log,後面列的是HEAD 的 latest log。

所以可以猜出 HEAD@{11} 大概是 rebase 之前的 head.
... rebase 包含很多動作,rollback, patch them, patch mine... 所以HEAD 變動很多次。

為了確認,可以用 git log 看一下
git log --pretty=oneline HEAD@{11}
f4fbe680ef41ed3d38ecc1f49a8b2c32a294c178 tidy up the driver/misc/Makefile, keeps the 9.4 kernel content, just append the new source added by us
6d5d23c54c2198831014b13d2f85f6f353f9e878 merge from 9.1: dimmer & brake gpio initial setting
911b3e5a7aced34f107715ebe4a1c09f8228c683 switch the sdcard init sequence, to make emmc as mmc0 always
a56e643558b691e5db349f0e630acc8e4e768cd4 Merge branch 'rtk' of git://robot/linux-2.6.35.y into rtk
8269efc25f3339750c7c9d05be88bc3232930f05 fix bug: system data abort due to audio-p driver
698afa31b154d7ea6ac6a3ba8664678e14fbbc97 fix bug: system data abort due to audio-p driver

這樣確認是了。

reset --hard 過去:
git reset --hard HEAD@{11}





ref :

2011年4月28日 星期四

show latest tag name

用 git tags 會 show 出所有的 tag,
如果只要列出這個 branch 最新的,要用:
git describe
有時候要加上 --tags




ref: http://stackoverflow.com/questions/1404796/how-to-get-the-latest-tag-name-in-current-branch-in-git

2011年4月26日 星期二

git clean

有時候在切換 branch 的時候,會出現這樣的 Error:
Untracked working tree file blah would be overwritten by merge
這是說,在這個 branch 裡,沒有加入 git track 的 file,在要 checkout 的 branch 中,被加入 track 了,所以 checkout barnch 時會有問題。

解決方法就是用
git clean把所有沒有 track 的file 刪掉,就可以 checkout 到另一個 branch。



ref: http://stackoverflow.com/questions/1125968/force-git-to-overwrite-local-files-on-pull 有時候用 git clean -f 強制刪除所有untrack 的 file.
但是這個命令不會刪除 untrack folder.

要的話,就要用: git clean -f -d 這樣就會把 untracked folder 也刪除。

2011年4月14日 星期四

make an existing git branch track a remote branch

如果當初 就是 checkout remote branch 出來,那個 branch 會自動設定 upstream 是 remote branch.
所以 push, pull 都會對應到 這個 upstream (remote branch)

但是如過自己這個 branch 是 local create,之後卻要設定他的 upstream 是某一個 remote branch 的話..
$ git branch --set-upstream localbranchname remotename/branchname
這樣就可以設定自己這邊的 localbranchname 的 upstream 是 remotename/branchname.


ref : http://stackoverflow.com/questions/520650/how-do-you-make-an-existing-git-branch-track-a-remote-branch