git diff认为没有变化..即使git status报告他们被修改了?
$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: file-added
modified: file-with-changes << it knows there are changes
Run Code Online (Sandbox Code Playgroud)
但为了看到差异,我需要显式添加最后一个reversion哈希..
$ git diff
(nothing)
$ git diff rev-hash
diff --git a/file-with-changes b/file-with-changes
index d251979..a5fff1c 100644
--- a/file-with-changes
+++ b/file-with-changes
.
..
Run Code Online (Sandbox Code Playgroud) 使用git,我如何查看上次提交中的更改?
我的意思是我想看到我的最后一次提交和之前的提交之间的差异。我知道我可以在 Github 浏览器上看到它,但我想在终端上的本地提交历史记录中看到它。
我知道我可以在提交之间进行 git diff 。所以,我可以git diff oldCommit...HEAD看到这些变化。但是有没有一个命令可以让我不必oldCommit从git log繁琐的地方复制呢?
有没有办法检查当前分支中的工作目录与特定文件中另一个分支的工作目录之间的区别?例如,如果我在文件1的分支A中工作,我想比较分支B上的文件1的差异.
我遇到长期重组的一个问题是必须解决多余的冲突.假设我有一个带有一系列提交的分支,它们不断修改一个函数,最后的提交完全删除了该函数.
当我这样做时rebase master,Git天真地依次应用每个提交.这意味着我需要使用master的提示解决每个提交 - 即使最终这些工作被浪费了.
处理这种情况的好方法是什么?也许我应该为整个分支生成一个补丁,并将其应用于master?如果是这样,有什么方法可以保留一些历史记录吗?思想,建议等
我希望git diff通过文件名过滤结果.
特别是,我想要一个名为"AssemblyInfo.cs"的文件的diff,但是位于git存储库中的任何位置.
我在Cygwin上使用git,如果这有所不同.
我期望git diff像git add其他人那样工作,能够做类似的事情
git diff **/models.py
Run Code Online (Sandbox Code Playgroud)
而不是必须这样做
git diff /full/path/to/my/python/file/called/models.py
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为
git commit **/models.py
git add **/models.py
Run Code Online (Sandbox Code Playgroud)
两者都像你期望的那样工作.
有没有人让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时传递文件的两个版本?这很烦人......
为什么不git diff使用流程替换?
$ echo hallo > hallo
$ echo holla > holla
$ git diff hallo holla # works
$ git diff hallo <(cat holla) # works not
diff --git a/hallo b/hallo
deleted file mode 100644
index 4cf5aa5..0000000
--- a/hallo
+++ /dev/null
@@ -1 +0,0 @@
-hallo
diff --git a/dev/fd/63 b/dev/fd/63
new file mode 120000
index 0000000..864a6ca`
Run Code Online (Sandbox Code Playgroud)
与...相同git diff --no-index.
它适用于普通diff.cat只是一个简单的例子,可以用一个非平凡的sed表达式代替.
解决方法:
$ cat holla | git diff hallo - …Run Code Online (Sandbox Code Playgroud) 我最近从SVN转到git,并尝试学习git的方法.我需要找到我的存储库的2个分支之间已更改的文件.我使用以下命令:
git diff branch_2..branch_1
Run Code Online (Sandbox Code Playgroud)
我得到了以下错误:
fatal: ambiguous argument 'branch_2..branch_1': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Run Code Online (Sandbox Code Playgroud)
git branch给出以下o/p:
git branch -a
* branch_1
master/origin
remotes/origin/HEAD -> origin/master
remotes/origin/branch_2
remotes/origin/branch_1
Run Code Online (Sandbox Code Playgroud) 尝试调整来自旺旺的答案以从"git diff"中排除文件以获得--stat标志并失败 - 接受的答案(创建驱动程序)似乎只是unix(重定向到/ bin/true,无论这意味着什么)加上它创建了一个驱动程序将它永久地分配给文件类型,而我正在寻找一个开关来临时禁用文件的差异(或者更确切地说是某些文件).
脚本解决方案:
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
Run Code Online (Sandbox Code Playgroud)
实际上调用git状态并编辑其输出 - 而我想要的是指示git diff本身在计算(简单)--stat(只是更改行)时忽略一些文件.我经历了git-diff文档,但似乎无法找到这样的选项.有人帮我一把吗?
$ git --version
git version 2.6.1.windows.1
Run Code Online (Sandbox Code Playgroud)