如何在Git中查看单个文件的更改历史记录,完整的详细信息?
我有:
git log -- [filename]
Run Code Online (Sandbox Code Playgroud)
它显示了文件的提交历史记录,但是如何获取每个文件更改的内容?
我正试图从MS SourceSafe过渡到过去那么简单right-click→ show history.
我更愿意在Vim中编写提交消息,但它在Emacs中打开它们.
如何配置Git以始终使用Vim?请注意,我想在全球范围内执行此操作,而不仅仅是针对单个项目.
在Git中查看和编辑合并的最佳工具是什么?我想得到一个3向合并视图,在单独的面板中有"我的","他们的"和"祖先",以及第四个"输出"面板.
此外,调用所述工具的说明也很棒.(我仍然没有弄清楚如何以这样的方式启动kdiff3,它不会给我一个错误.)
我的操作系统是Ubuntu.
虽然这个问题和答案中的大部分信息都可以在StackOverflow上获得,但它分布在许多页面以及其他错误或误导性的答案中.我花了一段时间拼凑出我想知道的一切.
有很多不同的程序可以用作你的git difftool和mergetool,对于哪个是最好的(意见,要求和操作系统明显不同)肯定没有共识.
Meld是一个流行的跨平台(UNIX/Linux,OSX,Windows)选择,如StackOverflow问题所示,什么是Git最好的可视化合并工具?其中提出梅尔德的答案的答案是其他任何工具的3倍以上.
我的答案将在下面回答以下两个问题:
注意:没有必要使用与difftool和mergetool相同的程序,可以为两者设置不同的程序.
以下命令之间有什么区别?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
Run Code Online (Sandbox Code Playgroud)
diff手册谈到它:
比较分支机构
Run Code Online (Sandbox Code Playgroud)$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- 主题提示与主分支之间的更改.
- 与上述相同.
- 自主题分支启动以来主分支上发生的更改.
但对我来说并不完全清楚.
当我输入"git diff"时,我想看到一个并排的差异,就像"diff -y"一样,或者喜欢在像"kdiff3"这样的交互式差异工具中显示差异.如何才能做到这一点?
当我做一个git diff时,它会显示已添加的行:
+ this line is added
Run Code Online (Sandbox Code Playgroud)
已删除的行:
- this line is removed
Run Code Online (Sandbox Code Playgroud)
但它也显示了许多未修改的行:
this line is not modified
this line is also not modified
Run Code Online (Sandbox Code Playgroud)
这导致实际的git diff看起来像这样:
+ this line is added
this line is not modified
- this line is removed
this line is not modified
Run Code Online (Sandbox Code Playgroud)
我可以要求git只显示已修改的行并忽略所有其他未修改的代码吗?我写了一个方法,它将删除所有在它们前面没有"+"或" - "符号的行,但我相信必须有一个更简单的方法来执行此操作.
在我的git diff中,我只对看到已修改的行感兴趣.
提前致谢.
作为一个以前的bzr用户和新手,git我正在努力寻找git blame类似的好GUI工具bzr qannotate.后者有两个主要观点:
截图:

我看到XCode IDE有类似内置的内容,虽然它在编辑器窗口内,因此不是很方便.
到目前为止,我已经尝试过GitX 0.7.1和Mac的GitHub - 他们都没有"责怪".
我刚刚检查了SourceTree for Mac,虽然它有责备支持,但它相当简陋,并且显示我几乎与命令行相同git blame,尽管我可以双击该行以查看相应的修订和另一个窗口中的更改.那仍然不如bzr qannotate.
我可以使用其他GUI工具吗?
有没有人让Meld在Windows上与Git合作?我试图让它工作,我没有成功.
我安装了Meld,当我从命令行调用它时有两个文件作为参数,它们很好地区分它们以便正确安装Meld.但是我无法使用Git(Git Diff).我使用的git version 1.8.1.msysgit.1是Git 版本.
我尝试了几件事:我创建了一个shell脚本,meld.sh:
#!/bin/bash
meld.exe "$2" "$5"
echo $2
echo $5
Run Code Online (Sandbox Code Playgroud)
并从Git中使用它:
[diff]
tool = meld
[difftool "meld"]
cmd = \"D:\\meld.sh\"
Run Code Online (Sandbox Code Playgroud)
我试着把它添加为像这样的difftool:
[diff]
tool = meld
[difftool "meld"]
cmd = \"C:\\Program Files (x86)\\Meld\\meld\\meld.exe\"
Run Code Online (Sandbox Code Playgroud)
或者像这样:
[diff]
tool = meld
[difftool "meld"]
cmd = '\"/c/Program Files (x86)/Meld/meld/meld.exe\" $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED'
Run Code Online (Sandbox Code Playgroud)
但它似乎真的不起作用.我还试图从我的shell脚本中回显第二个($ 2)和第五个($ 5)参数,没有输出.我还尝试过以下几种方式使用批处理脚本:
meld.exe %2 %5
Run Code Online (Sandbox Code Playgroud)
要么
meld.exe %~2 %~5
Run Code Online (Sandbox Code Playgroud)
但它确实不起作用......如何在传播Git到Meld时传递文件的两个版本?这很烦人......