git giff | merge不会忽略任何空白

时间:2019-01-12 10:49:35

标签: git

我的意思是,我的问题与Ignore *all* whitespace changes with git-diff between commits完全相反

(Ubuntu,git 2.17.1)

$ git checkout development
$ git diff development master
...
-// some text
+    // some text
...

好的,没有关键的差异列表,自动合并应该成功运行。但是wtf是这样的:

$ git merge master
up to date.

我要合并到完全一样!我在Windows上进行的早期项目,git发现并合并了所有这些琐碎的差异。即使“ git diff”发现了差异,为什么Git没有合并这种差异的原因是什么?
这是我的

$ git config --list
diff.tool=meld
difftool.prompt=false
difftool.meld.cmd=meld $LOCAL $REMOTE
merge.tool=meld
mergetool.meld.cmd=meld $LOCAL $MERGED $REMOTE --output $MERGED
credential.https://....git.beanstalkapp.com.username=gitusername
color.ui=auto
user.email=gitusername@server.de
user.name=gitusername
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=https://....git.beanstalkapp.com/liebesschloss.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.development.remote=origin
branch.development.merge=refs/heads/development

任何人都可以支持我配置和/或使用git来处理所有空白吗?
也许我看不到所有的阿甘树?

1 个答案:

答案 0 :(得分:0)

  

我要合并为完全相同!

这不是git merge所做的。

退后一会,并考虑git merge的目标是结合工作。假设您和其他一些人(我们称他为Fred)从所有相同的文件开始。其中之一是一些使用//注释的文件。

Fred在第55行更改了一些代码。同时,注意到注释中的拼写错误:

// some tuxt

应为:

// some text

,也许应该以不同的方式缩进。因此,修复第12行。

现在,在将来的某个时候,您将获得Fred的提交。您运行:

git diff <mine> <fred>

或:

git diff <fred> <mine>

其中之一是您所做的注释修复 如果git merge <fred>仅使文件与Fred的文件相同 ,那将撤消您的拼写修复程序因此,git merge 不使用两次分支提示提交的git diff的结果。

那么, git merge使用什么?

Git的合并操作取决于找到合并基础。本质上,合并基础是您和Fred都开始的共同提交。 查找合并基础是检查提交图的问题。

提交图的出现是因为每个提交都有一个 parent 提交。 1 您当前提交的父级就是您之前的那个父级,或做出您当前提交的任何人。该提交的父级是该提交的父级,依此类推。 Git通过遵循这些向后指向的父链来工作。有关(更多)信息,请参见我对类似合并问题的许多其他答案。

但是,您特别跑了:

git merge master

并得到:

Already up to date.

当您的分支位于主服务器之前 时,会出现此特殊消息。也就是说,假设提交图如下所示:

... <-F <-G <-H   <-- master
               \
                I <-J   <-- development (HEAD)

您的当前提交是提交JJ代表丑陋的哈希ID),其父为提交I,其父为提交H。因此,如果在我们的小“组合工作”设置中,master代表弗雷德的最新作品,而development代表您的作品,那么命令:将弗雷德与我的作品组合起来就很容易了:你们俩都是从Fred的最新文章开始的,提交H。从那时起,您进行了一些更改。 Git完全保留了您的开始。


1 有些提交有两个父母。这些提交有些特殊,因为它们是 merge 提交。存储库中至少有一个提交具有 no 个父级,因为这是第一次提交,并且不能有父级。


查看提交图

查看提交图的方法有很多,包括使用各种GUI或Git附带的基于tcl / tk的查看器gitk。在某些方面,这些方法比直接内置于Git的文本图形查看器更好,但是该查看器始终存在,并且不像这些图形查看器那样依赖于外部软件。

运行git log --graph,Git将生成一个图形。由于git log的输出很长,因此您在页面上看不到太多东西,因此您可能希望指示git log每次提交使用一行:

git log --oneline --graph

这将向您显示从当前提交开始并向后工作的图形。为了确保Git告诉您第一次提交当前的提交,您可能需要添加--decorate选项,或在配置中打开log.decorate

git log --decorate --oneline --graph

(或git config log.decorate auto,在命令行上使用--decorate时会自动暗示git log)。并且,要告诉Git从 all 分支和 all 标记开始向后工作,您可能需要添加--all 2 < / p>

git log --all --decorate --oneline --graph

或者在这种情况下,您可以使用:

git log --decorate --oneline --graph master develop

告诉Git:masterdevelop开始,向我展示提交以及它们的父级关系。这样您就可以查看图形并通知您(至少在某种程度上)有关Git在masterdevelop之间的合并基础。


2 “所有装饰单线图”是一个非常有用的组合,可以通过get help from A DOG中的助记符Pretty git branch graphs来记住。