代码之家  ›  专栏  ›  技术社区  ›  stevec Zxeenu

第n个修改文件的Git diff?

git
  •  1
  • stevec Zxeenu  · 技术社区  · 4 年前

    假设我们更改了几个文件,并且希望一次查看一个文件的差异,我知道我们可以使用这样的方法

    git status
    
    Changes not staged for commit:
     directory)
        modified:   app/assets/stylesheets/application.scss
        modified:   app/javascript/packs/application.js
        modified:   app/views/layouts/application.html.erb
        modified:   config/webpack/environment.js
    

    然后跑

    git diff app/assets/stylesheets/application.scss
    

    然后

    git diff app/javascript/packs/application.js
    

    等等

    git diff app/views/layouts/application.html.erb
    

    逐个查看每个文件的差异(这里需要逐个查看,但所有文件路径的键入都不需要,即使使用tab自动完成)。

    问题

    有没有一种方法可以实现同样的效果(即一次查看单个文件的git diff),但不必键入(手动或使用tab autocomplete)更改文件的完整路径?(例如,我们能否以某种方式引用伪代码: git diff --mod_file 1 , git diff --mod_file 2 等等)?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Brian61354270    4 年前

    如果在类似bash的shell中工作,可以定义一个shell函数,例如

    function gitdiffn() {
        git diff ${@:2} $(git diff --name-only | sed -n "$1 p") 
    }
    

    然后可以用来浏览修改过的文件列表(使用基于1的索引) 像

    $ gitdiffn 1
    $ gitdiffn 2
    # ...
    

    包括 ${@:2} $(command substitution) 在获取第n个文件名时,我们允许向 git diff 调用,所以像

    $ gitdiffn 1 --minimal
    

    将按预期工作。

        2
  •  1
  •   j6t    4 年前

    您可以使用 less .也就是说,你打字

    git diff
    

    和往常一样,然后打字 /^diff 要搜索大块头,请键入 n 直到你找到你感兴趣的文件。类型 N 向后搜索。

    较少的 记住最近使用的搜索模式。下一次就可以打字了 N .使用上下箭头循环浏览最近使用的图案。

        3
  •  1
  •   Marcus    4 年前

    我想 git difftool 我会做你想做的。

    也许你想安装一些自己的difftool,任何适合你需要的工具。