首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >git比较重命名的文件

git比较重命名的文件
EN

Stack Overflow用户
提问于 2011-10-14 03:08:52
回答 3查看 31.8K关注 0票数 117

我有一个文件a.txt

代码语言:javascript
复制
cat a.txt
> hello

a.txt的内容是"hello“。

我做出了承诺。

代码语言:javascript
复制
git add a.txt
git commit -m "first commit"

然后,我将a.txt移到test目录中。

代码语言:javascript
复制
mkdir test
mv a.txt test

然后我进行第二次提交。

代码语言:javascript
复制
git add -A
git commit -m "second commit"

最后,我将a.txt编辑为说“再见”。

代码语言:javascript
复制
cat a.txt
> goodbye

我做了最后一次承诺。

代码语言:javascript
复制
git add a.txt
git commit -m "final commit"

现在我的问题是:

如何在上次提交和第一次提交之间区分a.txt的内容?

我试过了:git diff HEAD^^..HEAD -M a.txt,但不起作用。git log --follow a.txt可以正确地检测到重命名,但我找不到与git diff等效的方法。有吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-14 03:26:03

HEAD^^HEAD之间的不同之处在于,您在两个提交中都有一个a.txt,所以只要考虑这两个提交(这就是diff所做的),就没有重命名,只有一个副本和一个更改。

要检测副本,可以使用-C

代码语言:javascript
复制
git diff -C HEAD^^ HEAD

结果:

代码语言:javascript
复制
index ce01362..dd7e1c6 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1 @@
-hello
+goodbye
diff --git a/a.txt b/test/a.txt
similarity index 100%
copy from a.txt
copy to test/a.txt

顺便说一句,如果您将diff限制为只有一条路径(就像您在git diff HEAD^^ HEAD a.txt中所做的那样),您将永远看不到重命名或副本,因为您已经排除了除单个路径之外的所有内容,并且根据定义,重命名或副本涉及两个路径。

票数 109
EN

Stack Overflow用户

发布于 2015-05-15 05:32:02

您还可以执行以下操作:

git diff rev1:file1 rev2:file2

对于您的示例,这将是

git diff HEAD^^:./a.txt HEAD:./test/a.txt

注意显式的./ --这种格式假定路径是相对于存储库的根的。(如果您在repo的根目录中,当然可以省略这一点。)

这完全不依赖于重命名检测,因为用户明确说明了要比较的内容。(因此,它在其他一些情况下也很有用,比如在git-svn环境中比较不同svn分支之间的文件。)

票数 52
EN

Stack Overflow用户

发布于 2018-06-24 21:07:23

如果重命名提交已暂存但尚未提交,则可以使用:

代码语言:javascript
复制
git diff --cached -M -- file.txt renamed_file.txt
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7759193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档