我知道我可以使用该git diff命令来检查更改,但据我所知,它是基于目录的.这意味着它提供了当前目录中所有文件的所有更改.
如何仅检查一个特定文件中的更改?说,我已经更改了文件file_1.rb,file_2.rb...,file_N.rb但我只对文件中的更改感兴趣file_2.rb.我如何检查这些更改(在我提交之前)?
当被问及Git 在2007年Google的技术演讲期间可以处理多少文件时,引用Linus Torvalds的话(43:09):
…Git跟踪您的内容。它永远不会跟踪单个文件。您无法在Git中跟踪文件。您可以做的是,您可以跟踪一个文件的项目,但是如果您的项目有一个文件,请确保做到这一点并且可以做到,但是如果您跟踪10,000个文件,Git永远不会将它们视为单个文件。Git认为一切都是完整的内容。Git中的所有历史都基于整个项目的历史…
(这里的成绩单。)
然而,当你潜入Git的书,你被告知的第一件事是,在Git的文件既可以跟踪或未经跟踪。此外,在我看来,整个Git体验都面向文件版本控制。使用git diff或git status输出时按文件显示。使用时,git add您还可以根据每个文件进行选择。您甚至可以基于文件查看历史记录,而且速度很快。
该陈述应如何解释?在文件跟踪方面,Git与其他源代码控制系统(例如CVS)有何不同?
是否有可能让git在特定文件之间产生差异,因为它现在存在,并且在最后一次提交之前存在改变它?
也就是说,如果我们知道:
$ git log --oneline myfile
123abc Fix some stuff
456def Frobble the foos
789dba Initial commit
Run Code Online (Sandbox Code Playgroud)
然后git diff 456def myfile显示myfile的最后一次更改.没有所产生的知识,是否有可能做同样的事情git log; 123abc有什么变化?
可能重复:
使用Git版本控制查看文件的更改历史记录
有时我想逐步浏览特定文件的历史记录.在过去,我使用P4V,这非常快速和直观.
切换到git这是一项艰巨的任务.
我搜索了SO,我尝试了一些常用的guis:github,gitk,gitg,git-gui.
这些都消除了手动运行命令的需要,但工作流程与此相同.查看文件历史记录; 查看提交; 搜索大量不相关文件的差异.这是缓慢而重复的.
所有数据都在repo中,所以我认为这个简单的常见用例没有理由不能简化.
任何人都可以推荐一个这样做的工具 - 或者更有效的方式来利用命令行来做我想要的事情?
谢谢你的任何建议.
我有一个文件a.txt.
cat a.txt
> hello
Run Code Online (Sandbox Code Playgroud)
内容a.txt是"你好".
我做了一个提交.
git add a.txt
git commit -m "first commit"
Run Code Online (Sandbox Code Playgroud)
然后我a.txt进入了一个test目录.
mkdir test
mv a.txt test
Run Code Online (Sandbox Code Playgroud)
然后我做了第二次提交.
git add -A
git commit -m "second commit"
Run Code Online (Sandbox Code Playgroud)
最后,我编辑a.txt说"再见".
cat a.txt
> goodbye
Run Code Online (Sandbox Code Playgroud)
我做了最后一次提交.
git add a.txt
git commit -m "final commit"
Run Code Online (Sandbox Code Playgroud)
现在这是我的问题:
如何区分a.txt上次提交和第一次提交之间的内容?
我试过了
git diff HEAD^^..HEAD -M a.txt,但是那没用. git log --follow a.txt正确检测重命名,但我找不到相应的git diff.有吗?
当我执行a git diff或a时git log -p,如何获取与输出内联的源文件的行号?
我试着man git-diff | grep "line numbers"查一下,我试着谷歌搜索,但没有得到任何快速.
在Linux中,我最喜欢的合并工具是Meld,我使用或配置它与Git一起工作时没有任何问题.然而,在Windows中它是一个不同的故事.
首先,我从我在这里找到的软件包中安装了Meld:https://code.google.com/p/meld-installer/
然后,我配置了我的.gitconfig,以支持Meld作为默认的mergetool
[merge]
tool = meld
[mergetool "meld"]
path = C:\\Program Files (x86)\\Meld\\meld\\meld.exe
keepBackup = false
trustExitCode = false
Run Code Online (Sandbox Code Playgroud)
所以,当我遇到冲突时,我会做git difftool而Meld确实打开了.但是,Git写入传递给diff工具的文件的路径不正确.例如,即使Git在存储库目录(我称之为git mergetool的位置)中生成BASE,LOCAL和REMOTE文件,Meld也会尝试打开可执行文件目录中的每个文件.
Meld尝试打开C:\ Program Files(x86)\ Meld\meld\roses.txt.LOCAL.2760.txt,而不是打开C:\ repo\roses.txt.LOCAL.2760.txt.
有没有人遇到过这个或知道如何配置Git/Meld在Windows中正常工作?
使用Git版本控制查看文件的更改历史记录,了解在Git中查看文件历史记录的其他方法.
可以在Emacs Magit中完成吗?
尽管阅读了很多关于GIT和移动文件的帖子,但我仍然很难理解如何追踪完整的历史记录.这样gitk myfile的建议在这里似乎只能说明历史,直到前一个举动.据我所知,GIT不会跟踪文件,只跟踪文件的内容.所以我肯定能够查看文件的完整演变,即使它被移动了吗?
任何人都可以指导我一个简单的好例子/教程吗?
我想看一个示例,其中一些文件被移动,更改和提交,然后显示单个文件的历史记录,移动和所有.我一直在看'日志',但这似乎与checkins有关.仍然会欣赏一些建议,即使它说我仍然在想太多的SVN.
我在没有考虑的情况下手动移动了一堆文件,并且找不到让git认识到文件只是被移动而不是实际上不同的文件的方法.有没有办法做到这一点,除了删除旧的和添加新的(从而丢失历史),或使用git-mv重做所有更改?