我试图将开发分支合并到主服务器中。但它似乎撤消了在master中提交的提交,只要特定提交不再出现在文件的git log
中。
当我在主分支上时,我可以在7月14日看到提交2d1b9af
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.
然后我合并了我的大分支。
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 <GregH@GREGH-LT001>
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
,如上所示,显示最新更新jun 21
git log server \ 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 :(得分:1)
从git log
获得的输出实际上相当棘手。你可以触发很多陷阱。在这种情况下你要打的那个被称为“历史简化”。引自the documentation:
有时您只对历史记录的某些部分感兴趣,例如修改特定&lt;路径&gt;的提交。但历史简化有两个部分,一部分是选择提交,另一部分是如何做,因为有各种简化历史的策略。
以下选项选择要显示的提交:
<paths>
提交修改给定的&lt;路径&gt;被选中。
--simplify-by-decoration
选择某些分支或标记引用的提交。
请注意,可以显示额外的提交以提供有意义的历史记录。
以下选项会影响简化的执行方式:
默认模式
将历史简化为最简单的历史,解释树的最终状态。最简单的,因为如果最终结果相同(即合并具有相同内容的分支),它会修剪一些侧枝
--full-history
与默认模式相同,但不会修剪某些历史记录。
[剪断]
在合并之前,Git简化了所查看的历史记录,而没有查看合并的路径。
合并后,Git简化了查看历史记录,同时查看合并的路径(或者更确切地说,“两条路径”)。由于你使用默认模式,这允许Git“修剪一些侧枝”,正如文档所说(没有详细介绍哪些侧枝被修剪,尽管后来还有更多在使用单词TREESAME
的部分中:未明确说明,除了列出的&lt;路径&gt;中的文件之外,在删除每个文件后都会对TREESAME
进行测试。
如果您添加--full-history
,您应该会看到您的提交返回。
请注意,如果您未指定某些路径,则不会启用历史记录简化,除非您添加一些特定的简化选项(在我剪切的部分中)。