如何列出所有带有更改的行,以便使用emacs在更改之间轻松导航?

时间:2014-01-09 09:04:49

标签: git emacs git-diff git-log

我希望git向我展示在两个特定提交之间发生变化的所有行,包括每行的文件名和行号。我想输出类似于

file.cpp:20:- void deletedFunction()
file.cpp:20:+ int addedFunction()
Makefile:3:-# removed comment

我想使用它通过编译模式next-error命令轻松浏览所有已更改的提交 emacs 。因此,第二个:之后的确切输出可能看起来不同,但filename:line:...应该在那里。此外,并非所有更改都必须列出 - 仅添加或删除 - 仅适用于启动。

3 个答案:

答案 0 :(得分:2)

很高兴看到我的评论解决了你的问题:) 我说: “我想知道(强制性问题):你对magit不满意,为什么?你可以看到差异,导航和点击转到文件和行nb。对我来说很好。»

Magit手册住在这里:http://magit.github.io/master/magit.html 和github上的代码:https://github.com/magit/magit

完整的介绍:http://www.masteringemacs.org/articles/2013/12/06/introduction-magit-emacs-mode-git/

(像往常一样,它适用于ELPA:M-x list-packages

享受!

ps:我使用的两个配置:

; use ido to switch branches
; https://github.com/bradleywright/emacs-d/blob/master/packages/init-magit.el
(setq magit-completing-read-function 'magit-ido-completing-read)
;; open magit status in same window as current buffer
;; (setq magit-status-buffer-switch-function 'switch-to-buffer)
;; highlight word/letter changes in hunk diffs
(setq magit-diff-refine-hunk t)

答案 1 :(得分:2)

我从未使用过magit(虽然我听过很好的事情),而且我很少使用git(我是hg家伙),但所有这些应该适用于vc模式支持的VCS。

它不像compilation-mode那样有效,但您可以使用diff-mode轻松浏览差异。

获取差异缓冲区:

  • C-x v =对当前文件执行diff。
  • C-x v D在目录上执行递归diff。
  • C-x v d将您带到一个缓冲区,将所有修改/添加/未跟踪/等。回购中的文件。您可以使用m选择它们,并使用=区分所选文件。

在差异缓冲区中:

  • n转到下一个大块。
  • p转到上一个大块。
  • N转到下一个文件。
  • P转到上一个文件。
  • o转到当前大块的源文件。

答案 2 :(得分:1)

请注意git-gutter:https://github.com/emacsorphanage/git-gutter。 它为您提供:git-gutter:next-hunkgit-gutter:previous-hunk。与magit结合使用可以带来很好的体验。