2019-08-02:
很困跳芳,睡一覺起來繼續(xù)折騰如何通過git來獲取修改的method雕什。沒想到測試了網(wǎng)上一個方法节芥,居然真的可行!OMG调塌。so amazing:
https://drunkenmonkey.at/blog/diffs_with_proper_function_context
節(jié)選原文如下(我是要搞java文件晋南,所以就將下面的php換成java就好了。哈哈哈):
The solution
It turns out Git's diff functionality already has support for creating the right function context information for various file types – it just doesn't know which files correspond to which file type. (It seems not even the standard?.php?extension is recognized by default.)
To remedy this, simply create a file with the following contents:
*.engine?? diff=php
*.inc????? diff=php
*.install? diff=php
*.module?? diff=php
*.php????? diff=php
*.profile? diff=php
*.test???? diff=php
*.theme??? diff=php
Save the file either in?.git/info/attributes?or?.gitattributes?(for just the local project), or (to change this globally) in?$HOME/.config/git/attributes?(or?$XDG_CONFIG_HOME/git/attributes, if that variable is set). That's it – testing again, we now see the proper function context in the diff:
@@ -40,6 +40,7 @@ public function operator_options() {
'<=' => t('Is less than or equal to'),
'=' => t('Is equal to'),
'<>' => t('Is not equal to'),
+????? '!=' => t('Is REALLY not equal to'),
'>=' => t('Is greater than or equal to'),
'>' => t('Is greater than'),
'empty' => t('Is empty'),
Much better, right?
Note:?I haven't yet found out where to put the global attributes file for Windows. If you know, please post a comment and tell me, and I'll include it here.
2019-07-22 關(guān)于通過使用git diff -W 顯示修改行附近的functions的命令羔砾,雖然接下來抽取怎么搞不明白负间,但最起碼知道了點東西:
git help diff?shows this option:
-W, --function-context
? ? ?Show the whole surrounding functions of changes.
So, it looks like?git diff -W?should do what you want.
Using git to identify all modified functions in a revision?其實無法獲取,還是要進一步分析:
2016-12-28 search issue和pull requests的open或者closed的數(shù)目姜凄。這下終于不用在
search issues的時候還把pull requests給放進去了政溃,大大的滿足感!L怼董虱!
You might also take a look at the search apihttps://developer.github.com/v3/search/#search-issues. Looks like you can filter on type and probably also on closed or not :)
https://api.github.com/search/issues?q=+type:pr+user:StackEx??change&sort=created&??order=asc–
2016-12-26 search github repositories
https://api.github.com/search/repositories?q=language:Java+created:"2014-12-03T12:32:42Z .. 2014-12-03T13:32:42Z"
2016-07-12:
git shortlog XXX...XXXX可以產(chǎn)生這段范圍commit 的changelog文檔
git archive --prefix='XXX' --format=zip > XXXX.zip會將當前代碼打包。
git describe sha1將會為該commit產(chǎn)生一個名字描述申鱼,名字中包含最近一次的tag包名+sha1信息愤诱。如果沒有tag,則會失敗捐友。
git format-patch會將一個個commit達成一個個xxx.patch包淫半,且按順序來打,這個可以發(fā)給email匣砖,然后別人可以用git apply科吭,am或者patch命令來實施該patch。
有時我們不需要clone或者add remote脆粥∑瞿纾可以直接git pull url來獲取結(jié)果。
git apply XXX.patch會丟掉author信息变隔。
git apply --check XXX.patch可以事先測試該patch能否成功實施规伐,如果不能,則會報錯匣缘,如果能猖闪,啥消息也沒有。當你真正運行g(shù)it apply xxx.patch后肌厨,它并不幫你產(chǎn)生新的create培慌,只是放在index中,讓你自己來commit柑爸。吵护。
git cherry-pick sha1不管哪種情況,都會產(chǎn)生新的commit。
git cherry-pick --edit sha1是可以修改commit msg的馅而。
當命令成功運行沒有沖突時會保留author信息(不管改不改msg)祥诽,反之則沒有原來的author信息。author變成了commiter瓮恭。
2016-07-07
1. git pull 默認會將server上所有的分支與local上的分支進行merge雄坪。
且會把local上沒有的branch也自動fetch到local且創(chuàng)建一個對應(yīng)的branch。
如果是git pull master就只是會和master進行merge屯蹦,其他分支不會去merge维哈。
2. git fetch origin貌似沒有g(shù)it fetch branchXXX特意某個分支貌似。所以會將所有的branch數(shù)據(jù)fetch下來登澜。但不merge阔挠。merge需要自己去merge. 當然如果server上有l(wèi)ocal上沒有的branch,git fetch也取不下來了帖渠。
在當前分支下谒亦,git merge會merge當前分支和對應(yīng)的遠程分支。如果要merge其他分支空郊,需明確標明。
3. git clone會將所有的分支數(shù)據(jù)clone下來切揭。
2016-07-06 nju
1. git config --system XXX 全局設(shè)置狞甚,所有用戶有效。配置文件在/etc/gitconfig
??? git config --global XXX 單個賬戶設(shè)置廓旬,對該賬戶下的所有g(shù)it repo有效.???????????????? 配置文件在~/.gitconfig下或其他類似名
??? git config XXX 單個賬戶下的單個repo下設(shè)置哼审,只對該repo有效,會覆蓋前2個孕豹。配置文件在repo下的.git/config
使用git config --list可以顯示前面所有的3種配置涩盾。
在配置的時候,你可以直接在配置文件里寫励背,還可以在命令行里編寫春霍。如
git config --global core.editor vim
使用git config <key>(eg core.editor)會給出該key的具體配置。
2. 對命令獲取使用說明:
git help <verb>如git help commit叶眉≈啡澹可以查看任何一個git 命令的幫助文檔。
git <verb> --help如git commit --help
man git-<verb>如man git-commit
3. git commit -a -m 'XXX'? = git add all modified tracked files+ git commit -m 'XXX'
2016年06-25
1) git cat-file -p sha1val 可以看一個sha1 hash值為sha1val object對象的內(nèi)容
使用git add后衅疙,就往objects中加入了一個blob對象 sha1值
2) 然后各種git add git rm等這些操作都是先放到index對象中莲趣,index對象隨著命令的改變內(nèi)容而改變。index對象中存放內(nèi)容饱溢,路徑喧伞,sha值啥的。如果你要寫tree對象,是從index中的內(nèi)容寫入tree對象的潘鲫。绿聘。從來index都是隨時變化的(git add完一次就更新一次內(nèi)容),根本不屬于.git/objects中的對象次舌,objects對象只有四種:blob熄攘,tree,commit彼念,tag挪圾。其中blob只是content。tree記錄blob逐沙,dir等哲思,file name等信息。commit指向tree+parent commit吩案,tag指向commit棚赔。
git status 可以看index中的狀態(tài),而git ls-files -s會得到index中的內(nèi)容徘郭,eg:
100644 3b18e512dba79e4c8300dd08aeb37f8e728b8dad 0 hello.txt
3) 如果想將此刻的index寫入tree靠益。可以用git write-tree
4) git commit = git write-tree + git commit-tree treeval
5) git rev-parse V1.0 ?git rev-parse ab1234 都可以得到完整的40位sha1值
6)working dir-> index -> repository残揉。每次commit提交都是index中的內(nèi)容胧后,而不是working dir中的內(nèi)容
7) git commit filename = git add filename + git commit -m 'XXX' while for rm or move, you must git rm/mv filename, then git commit -m 'XXX'
8) git hash-object m1 可以為m1計算sha1值
9) objects 中的pack文件夾下原來會將很相似的文件分組,然后保存一個完整版本+delta版本來存儲其他文件
10) git rm XX后XX馬上就從working dir中消失了抱环,但要真正有效還要git commit下
git rm XX會從index和working dir中同時刪除壳快。如果只是要從index中刪除可以使用git rm --cached XX
如果不小心刪了找不到。還可以找回來:git checkout HEAD -- filename
11) git log XX可以看到文件名為XX的歷史镇草。但如果XX是重命名后的眶痰,要看其之前所有的,可以用git log --follow XX
2016-06-26
1) ?git log -n : list at most n commits;?git log=git log HEAD; git log cmitVal. 使用git log來看commit信息
2) git show objVal 用來看object的信息
3) ~是一條線上回溯梯啤,而^是幾個祖先之間回溯
4) X..Y=^X Y from commit X to Y, includes Y excludes X ? ? ? ? ? ? ? ? ? A...B=in A or B but not both
5) git bisect: find the unwork commit
git bisect start->git bisect bad->git bisect good XX-> git bisect bad 循環(huán)往復(fù)竖伯,可以找到first bad commit。進入bisect start模式后条辟,輸入bad和good的最初定位后黔夭,bisect每次都會從這個范圍內(nèi)找到中間的那個commti讓你判斷是good 還是bad,由此往復(fù)最后幫助定位the first bad commit羽嫡。結(jié)束后記得git bisect reset回來本姥。。
6)git blame -L 35, init/version.c誰最后修改了這個文件的第35行杭棵,哪次commit做的這個修改婚惫。氛赐。其實就是本質(zhì)跟蹤一個文件的行被什么commit改過,同時提供了commiter和時間唄內(nèi)容被
2016-06-27
1) git stash會將index和working dir中的修改全部抹去
2) git branch會簡單顯示分支而git show-branch默認會列出最新到幾個分支的第一個共同的commit停止先舷。每個分支前面的+號顏色不同艰管,然后*表示的是當前active的branch。
2016-06-28
1) git log --graph以圖形的形式展示commit序列
2)git merge后如果正常merge蒋川,則會在系統(tǒng)中各自保存commit牲芋,并且會有最終的merge commit。
2016-07-03
1) git rebase branch1捺球, branch2. 將branch2接在branch1的后面
2)git rebase -i master~3 可以對多個XXX進行commit的順序調(diào)換缸浦,用squash將后一個commit與前一個合并等。
3)git stash = git stash save氮兵,將你的working dir和index保存
git stash pop將之前保存的彈出來裂逐,恢復(fù)現(xiàn)場繼續(xù)工作。