2016-07-27 84 views
1

我正在尝试将开发分支合并到master中。但是它似乎取消了在主文件中进行的提交,以至于特定提交不再出现在文件的git log中。为什么git在合并后失去了日志提交?

当我在主分支,我可以看到07月14

c:\src>git status 
On branch master 
Your branch is up-to-date with 'origin/master'. 
nothing to commit, working directory clean 

c:\src>git log server\Fitnesse\FitNesseRoot\APITest\content.txt 
commit 88a68b11b273b98531ae686b85b5733b86706bda 
Author: charles 
Date: Fri Jul 15 00:56:44 2016 +0000 

    XX-338 Add IsDeleted to Place table 

commit 2d1b9afdabd7fbbf970d697bd0c15957a8fd288a 
Author: charles 
Date: Thu Jul 14 23:15:28 2016 +0000 

    fix FitNesse test which are broken by renaming 

commit f1616fed48bb15c1c120cfe016e571f49aae6244 
Author: charles 
Date: Tue Jun 21 11:04:53 2016 +1200 

    modify fitNesse Test for new API changes. 

然后我在大分支合并提交2d1b9af

c:\src>git merge origin/myLargeBranch 
Removing server/Database/355_UnitTest.sql 
Merge made by the 'recursive' strategy. 
.../packages.config        | 2 +- 
.../Utilities/Extensions/StringExtensions.cs  | 10 + 
.../Utilities/Throttle.cs       | 45 ++++ 

[ ... etc ] 

.../FitNesseRoot/APITest/content.txt   | 37 +-- 
128 files changed, 3705 insertions(+), 481 deletions(-) 
create mode 100644 [ ... ] 

c:\src>git status 
On branch master 
Your branch is ahead of 'origin/master' by 32 commits. 
    (use "git push" to publish your local commits) 
nothing to commit, working directory clean 

我注意到它改变了我正在看的文件。自从我拿到分支后,我实际上并没有修改这个文件。这可能与我的问题有关,但这并不是我所问的。

什么,现在是对我很重要,是他犯从7月14日是不是在我的日志更多:

c:\src>git log server\Fitnesse\FitNesseRoot\APITest\content.txt 
commit f1616fed48bb15c1c120cfe016e571f49aae6244 
Author: charles 
Date: Tue Jun 21 11:04:53 2016 +1200 

    modify fitNesse Test for new API changes. 

commit 16b7beb9d1045f5fe7354c0fdbe637a49bb48ce0 
Author: charles 
Date: Tue May 10 10:54:13 2016 +1200 

所以我是担心得到错误的代码在结束。这是一个的一个担心。

但我真的更担心的是Git是现在没有出现在它的日志的变化做过。

我缺少什么?

更新在@ tim-biegeleisen的评论之后,我追踪了实际的提交,但我仍然感到困惑。

的罪魁祸首似乎是从主合并到我的开发分支:

c:\src>git show b5637f9 
commit b5637f9a65e415f1b415fad99c9e7a4e6b46ab1a 
Merge: cb8ed90 6b5c0e1 
Author: GregH <[email protected]> 
Date: Tue Jul 26 04:25:40 2016 +0000 

    Merge from master 
[ ... ] 

CB8 ...是我的分支:

c:\src>git checkout cb8ed90 
Previous HEAD position was 6b5c0e1... PR 93: Merge DeletePlace to master 
HEAD is now at cb8ed90... Added tests for apple messages 


c:\src>git log server\Fitnesse\FitNesseRoot\APITest\content.txt 
commit f1616fed48bb15c1c120cfe016e571f49aae6244 
Author: charles 
Date: Tue Jun 21 11:04:53 2016 +1200 

6B5 ......是主

c:\src>git checkout 6b5c0e1 
Previous HEAD position was cb8ed90... Added tests for apple messages 
HEAD is now at 6b5c0e1... PR 93: Merge DeletePlace to master 

c:\src>git log server\Fitnesse\FitNesseRoot\APITest\content.txt 
commit 88a68b11b273b98531ae686b85b5733b86706bda 
Author: charles 
Date: Fri Jul 15 00:56:44 2016 +0000 

合并后,我已经从7月14日和15日失去了承诺。

c:\src>git checkout b5637f9 
Previous HEAD position was 6b5c0e1... PR 93: Merge DeletePlace to master 
HEAD is now at b5637f9... Merge from master 

c:\src>git log server\Fitnesse\FitNesseRoot\APITest\content.txt 
commit f1616fed48bb15c1c120cfe016e571f49aae6244 
Author: charles 
Date: Tue Jun 21 11:04:53 2016 +1200 

**更新:**通过VonC建议,git log --all显示提交仍处于历史。

没有--all,它是如上述,显示最新更新6月21日 git的日志服务器\ FitNesse的\ FitNesseRoot \ APITEST \ content.txt (不重复点的话)。

--all他们在那里:

c:\src>git log --all server\Fitnesse\FitNesseRoot\APITest\content.txt 
commit 88a68b11b273b98531ae686b85b5733b86706bda 
Author: charles 
Date: Fri Jul 15 00:56:44 2016 +0000 

    XX-338 Add IsDeleted to Place table 

commit 2d1b9afdabd7fbbf970d697bd0c15957a8fd288a 
Author: charles 
Date: Thu Jul 14 23:15:28 2016 +0000 

    fix FitNesse test which are broken by renaming 

commit f1616fed48bb15c1c120cfe016e571f49aae6244 
Author: charles 
Date: Tue Jun 21 11:04:53 2016 +1200 

    modify fitNesse Test for new API changes. 

怎么让他们在合并过程中撤消?

+0

基于第二个'git log',我看到_three_缺少提交:7月14日和15日提交失败,也没有合并提交。这种合并在哪里发生?它是本地的还是像GitHub一样的回购? –

+0

@TimBiegeleisen这些命令针对TFS git托管回购的本地克隆运行。从主人到我的开发分支有几个合并。他们都没有反对该文件。我会调查这方面。 – GregHNZ

+0

分支中的提交在Git中不会轻易消失,除非它们被删除,或者它们可能并不是真的存在。例如,如果您实际合并到的'master'分支不是您本地的版本,则后一种情况可能是解释。 –

回答

1

git log得到的输出实际上是相当棘手的。有许多陷阱可以触发。在这种情况下你打的那个叫做“历史简化”。从the documentation报价:

有时你只是在历史的部分感兴趣,例如修改特定<路径>的提交。但是历史简化有两部分,一部分是选择提交,另一部分是如何实现,因为有各种策略来简化历史。

下列选项中选择要显示的提交:

<paths>

           提交修改给定<路径>被选择。由一些分支或标记称为

--simplify-by-decoration

           提交被选择。

请注意,可以显示额外的提交以提供有意义的历史记录。

以下选项会影响进行简化的方式:

默认模式

           简化的历史解释树的最终状态的最简单的历史。最简单的,因为它修剪一些偏科,如果最终的结果是相同的(即合并了同样内容的分支机构)

--full-history

           同为默认模式,但不修剪一些历史。

[剪断]

在合并之前,Git的简化因为没有低头合并的路径看历史。

合并之后,Git简化了查看历史,同时向下查看合并的路径(或者说,“两条路径”)。由于您使用的是默认模式,因此这可以让Git“修剪一些分支”,正如文档所述(没有详细说明哪个支链正在被修剪,尽管后面的章节更多使用字TREESAME:没有明确说明TREESAME是在除去列出的<路径>中的那些文件之外的每个文件之后进行测试的。

如果您添加--full-history您应该看到您的提交返回。

请注意,如果您未指定某些路径,除非添加了一些特定的简化选项(在本节中我已经剪切),否则打开历史简化为而不是

相关问题