如何查看本地分支和远程分支之间指定文件的差异?
我知道这个命令:
git diff <local branch> <remote-tracking branch>
Run Code Online (Sandbox Code Playgroud)
但它给出了两个分支之间所有文件的差异,而我只关心一个指定文件的更改.
有没有办法将一系列提交导出到Git的补丁中.假设我需要从存储库导出最后5个提交并将它们导入另一个存储库.我该怎么做呢?
对此的帮助将不胜感激.
我正在使用git并且需要包含在diff结果未跟踪文件中.那么我必须执行什么命令来获得当前工作目录和HEAD之间的所有区别,甚至新文件添加中存在部分差异?
我正在使用Git 1.8.4和Linux(Kubuntu 13.10).
我有一个带子模块的Git存储库.如果我在主Git模块中请求目录差异,它可以正常工作.如果我在其中一个子模块中执行相同的操作,则会出现错误:
~/Projects/MAINMODULE/platform/SUBMODULE [master]$ git difftool -tool=meld --dir-diff --cached
fatal: Could not switch to '../../../../platform/': No such file or directory
diff --raw --no-abbrev -z --cached: command returned error: 128
~/Projects/MAINMODULE/platform/SUBMODULE [master]$ cd ..
~/Projects/MAINMODULE/platform [master]$ cd ..
~/Projects/MAINMODULE [master]$ git difftool -tool=meld --dir-diff --cached
// NO PROBLEM, works.
~/Projects/MAINMODULE [master]$ git version
git version 1.8.4
Run Code Online (Sandbox Code Playgroud)
你有什么主意吗?可能是Git Bug吗?
更新:1.8.5.3产生相同的输出
我对 git checkout 行为感到困惑。如果我想获取该文件的先前版本并执行以下操作:
git checkout HEAD^^ Xml/Config-Profile.xml
git status
Run Code Online (Sandbox Code Playgroud)
我得到:
On branch master
Your branch is up-to-date with 'origin/master'
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: Xml/Config-Profile.xml
Run Code Online (Sandbox Code Playgroud)
如果我这样做了,git diff,我没有区别。我发现如果我执行 git diff --cached,它会显示更改,所以我想这意味着我的 checkout 命令从存储库的 HEAD^^ 提交中提取并更新了“仅索引”?
我想我的担忧是(而且我无法直接从结帐手册页中获取信息):
1)为什么只有索引得到更新?为什么它不像我只是用文件的一些(以前的)副本替换了我的工作目录中的 Config-Profile.xml文件?
2)我想是什么让这让我感到困惑,也许这只是语义,是如果我在我的工作目录中编辑一个文件并决定我不喜欢它并做了一个 git checkout,它会替换文件工作目录。说完之后,我猜测 git checkout 会将索引中的最新文件拉入工作目录,而不是存储库中最新提交的文件?
3)是否有一个命令可以将文件从提交中直接拉到工作目录中,就好像我自己手动编辑到那个点一样?还是我需要创建自定义别名?
提前致谢。
有没有办法--word-diff用于LaTeX文件(*.tex)并保持其他文件类型的标准线差异?
我想要实现的是使用git diff命令并让git自动显示*.tex文件上的单词差异,而无需git diff --word-diff每次都写入.同时我希望git显示其他文件类型的标准行差异.那可能吗?
我需要为最后N次提交创建一个补丁文件,并将它们作为单独的提交应用到另一个分支.对于N = 3,我假设我必须这样做:
git diff HEAD~3 HEAD~2 >> diff1
git diff HEAD~2 HEAD~1 >> diff2
git diff HEAD~1 HEAD >> diff3
然后分别将它们应用于另一个分支:
git apply diff1
(push)
git apply diff2
(push)
git apply diff3
有没有更短的方法来做到这一点?
它以这种方式工作:
MYPC /d/home/project/some/path (master)
$ git diff --name-only --cached
root.txt
some/path/relative.txt
Run Code Online (Sandbox Code Playgroud)
即它显示了来自GIT根目录的路径,但是我需要来自当前目录的相对路径。
预期结果 :
$ git diff --name-only --cached --AND_SOME_OPTION
../../root.txt
relative.txt
Run Code Online (Sandbox Code Playgroud)
按照常识,它应该像一样工作git status。
PS
该--relative选项不起作用,因为它将显示该目录中的文件。在我们的示例中,它将仅显示relative.txt。
PPS
使用--git-dir效果不佳:
$ git --git-dir=$(git rev-parse --show-toplevel)/.git diff --cached --name-only
root.txt
some/path/relative.txt
Run Code Online (Sandbox Code Playgroud) git diff针对代码的输出进行了优化,该代码往往每行仅一个语句,而文本(如果像我这样的作者太懒了而无法使用换行符)会导致diff输出,这很难阅读,并且更多地是“ Wally在哪里?” 搜索比读取差异输出
而在GitLab或GitHub的Web前端上突出显示则立即显示出差异
我知道我正在比较HTML和纯文本(苹果和橘子),但是应该可以git diff通过使用不同的颜色或在更改周围添加标记字符来改善输出(JUnit []在插入周围使用,这对阅读,但我的意思是一个例子),这将是我第一次期望git中某些可用的东西实际上不是。
我对源文件进行了一些更改。当我尝试使用diff时
git diff src/core/src/authentication.rs
Run Code Online (Sandbox Code Playgroud)
控制台上的差异已^M附加到我编辑的所有行。
+ Some(b) => {^M
+ Ok(b)^M
+ }^M
+ }^M
}
Run Code Online (Sandbox Code Playgroud)
我在记事本中签出,看看是否可以在那里看到某些东西并清理干净,但是在尝试使用任何编码后都看不到。我在某处读到这是一个\r但不确定。无法在vim中替换/找到它。但是,这并非在我看到的所有文件中都会发生diff。为什么会这样呢?我想这不是我的源代码的一部分,而只与git有关。
编辑:我使用vim作为我的编辑器。
git ×10
git-diff ×10
diff ×1
git-apply ×1
git-checkout ×1
highlight ×1
highlighting ×1
latex ×1
meld ×1
staging ×1