2012-11-19 81 views
17

我犯了一個錯誤,即將Visual Studio項目從2008年升級到2010年,而沒有首先檢查我以前的更改。因此,我有一個巨大的系統生成文件(10k +行),每隔4行更改一次。跳到下一個修改後的文件在git diff?

我通常對於經常檢查東西來說相當不錯,所以我通常只需使用向下鍵來滾動瀏覽我的更改。在這種情況下,需要幾次才能滾動瀏覽系統生成文件的更改。

在完成git diff之後,有沒有辦法跳到下一個修改文件,以便您不必滾動瀏覽每個文件的每個更改?

+0

你可以用'git的差異fileName'如果你有一個小的變化集。 – zbrunson

+0

我想查看所有已修改的文件,只需跳過巨大的文件即可...... –

回答

31

默認情況下,git diff通過less管道輸出。因此,您可以使用less命令來搜索下一個標題。輸入/^diff並按輸入跳到下一個文件。

+1

我是否需要先退出當前的差異?我試着從我當前的差異中做它,它說'模式未找到' –

+1

'/'命令搜索你正在查看的當前位置。所以如果你得到這個消息,那麼在輸出中沒有以'diff'開頭的其他行。 –

+0

實際上,它聽起來像你*真正*想要做的是將這些(未提交的)更改分成兩個單獨的提交。做一個'git添加large.file.name'然後'git commit',然後剩下的所有更改將是*不是大的其他文件。 –

0

另一個選擇是調用update-index命令,並告訴它假裝一個巨型文件沒有改變。有一個更完整的例子here

1

我建議你使用tig。這是一個詛咒界面git,並且是一個很好的界面。

使用tig status您可以看到索引狀態,並通過按在任何文件上輸入,您會看到它的差異。 h向您顯示幫助菜單,但它是基於vi快捷方式的界面。

我認爲在任何基於debian的發行版中,您只能使用apt-get install它,或者您可以從鏈接的網站上創建它。

+2

默認情況下'tig'不允許你在文件之間快速跳轉,但是你可以用下面的綁定來完成它:'bind diff F:/^\ + \ + + +' – VitalyB

+1

@VitalyB謝謝你 - 我是驚訝的是它沒有默認綁定。對於未來的SOers,使用上面的'shift + f'將搜索下一個文件。既然它不是搜索,那麼'n'將移動到下一個文件,'shift + n'將移動到前一個文件。 – Samaursa

+0

意思是說「既然它是搜索」 也''bind diff'停止爲我工作。不知道爲什麼,但這是有效的:'綁定階段F:/^\ + \ + + +' – Samaursa

3

對於其他有用的命令,請輸入h以獲得幫助(同時處於git diff,位於less)。

特別是:

      JUMPING 

    g < ESC-<  * Go to first line in file (or line N). 
    G > ESC->  * Go to last line in file (or line N). 
    p %    * Go to beginning of file (or N percent into file). 
    t     * Go to the (N-th) next tag. 
    T     * Go to the (N-th) previous tag. 
    { ( [   * Find close bracket }) ]. 
    } ) ]   * Find open bracket { ([. 
    ESC-^F <c1> <c2> * Find close bracket <c2>. 
    ESC-^B <c1> <c2> * Find open bracket <c1> 
相關問題