Master分支在合并后丢失文件,文件在git merge输出中报告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Master分支在合并后丢失文件,文件在git merge输出中报告相关的知识,希望对你有一定的参考价值。

我有一个名为test-branch的分支(我知道名称应该只是test),并且我从master内部进行了一个git merge test-branch。合并成功,但是master分支中缺少文件。但是,这些文件在git merge输出中报告。例如,据报道:

... / cybertrust / tms / controller / TrustController.java | 556 +++++++++++++++++++++]

但是此文件不在master中。如果我再次运行git merge,它说已经是最新的。

编辑

没有任何更改被合并。甚至没有现有文件。git bash中的输出:

Findorgri@DESKTOP-7TIPI9E MINGW64 ~/git/trust-management (master)
$ git merge test-branch
Merge made by the 'recursive' strategy.
 TMS-listener-module/A13-certificate.pem            |  34 ++
 TMS-listener-module/A17-certificate.txt            |  32 ++
 TMS-listener-module/application.properties         |  47 ++
 TMS-listener-module/log4j.xml                      |  16 +
...
 98 files changed, 7998 insertions(+), 818 deletions(-)
 create mode 100644 TMS-listener-module/A13-certificate.pem
 create mode 100644 TMS-listener-module/A17-certificate.txt
 create mode 100644 TMS-listener-module/log4j.xml
 create mode 100644 TMS-listener-module/logback.xml
 create mode 100644 TMS-listener-module/src/main/java/com/cybertrust/authentication/AuthClient.java

编辑2:

我做了git reset --hard HEAD以撤消合并。然后我做了git push。现在,大师似乎真的是最新的。几个问题:

  1. 这两个分支现在具有相同的SHA。现在可以确定师父拥有一切吗?我应该检查其他东西以确保吗?

  2. 有人可以解释到底发生了什么吗?我不知道它是如何修复的。

答案

我无法理解到底发生了什么,才解决了问题,但是我可以回答其他问题。顺便说一句,如果有未提交的更改,您也可以执行git merge --abortgit reset --merge中止合并。

两个分支现在具有相同的SHA。现在可以确定师父拥有一切吗?我应该检查其他东西以确保吗?

不,没有其他要求。相同的SHA就足够了。

如果您能确切地了解发生了什么(尽管您已经提供了很多细节,但仍然)准确地[[ie,合并之前的masterorigin/master的状态等,那么我可能会能够为您提供一些答案:)

E:查看您的确切用例,事实是,当您执行git merge test-branch时,您[[did

test-branch合并到master中,但是所有事情都在本地发生,而< [you正在观察遥控器上的东西。一旦完成git push,更改就会被推送到origin/master 即,即远程设备,因此然后您会观察到更改的发生。E2:关于在Git中进行合并的一个重要概念是“合并冲突”。当文件同时在同一位置从两个不同源进行两个不同的更改(例如mastertest-branch中的两个不同更改)时,将发生合并冲突。现在,假设您的合并会发生冲突,您可能会看到类似以下内容:CONFLICT (content): Merge conflict in <fileName> Automatic merge failed; fix conflicts and then commit the result.

这意味着Git看到了两个不同的变化,取决于您手动修复它。现在,正如我所说,如果不确定合并过程中的事情,可以执行git merge --abortgit reset --mergegit reset --hard HEAD。这三个操作都将给出相同的结果

,使您进入最近进行的提交。作为补充,git reset --hard HEAD也将清理暂存区域,这意味着如果除合并之外还有其他未提交的更改,它们也将被撤消,并被删除,最后返回到当前工作树中的最新提交。而git merge --abortgit reset --merge只会通过删除所有合并冲突以及任何其他已合并的更改来撤消正在进行的合并。
现在我们对合并及其相关的事情有了一个好主意,让我们继续您的问题:

git reset --hard HEAD为什么不做任何事情?”

事实是,您一开始就没有任何合并冲突(这是因为您没有收到像我上面提到的错误消息之类的事实所支持)。因此,git reset不会消失,因为最新的提交

was

合并提交和过渡区域是干净的,因此git reset使您返回到该合并提交本身,因此您无法观察到任何变化,因为实际上没有任何变化。我希望这能满足您的好奇心;)最佳

以上是关于Master分支在合并后丢失文件,文件在git merge输出中报告的主要内容,如果未能解决你的问题,请参考以下文章

git---怎样将分支上的一个单文件合并到主分支上(master)

Git的使用-一个分支完全替换另一个分支

git合并分支

git 本地master分支提交到远程dev分支

Git:无法将功能分支合并到当前分支

Git冲突处理测试