修改提交中的Git提取/合并不起作用

时间:2016-02-16 14:09:51

标签: git

我的开发文件夹上有一个git存储库,另一个用作我团队测试的稳定基础。两者都在同一台机器上。

测试文件夹具有开发文件夹,因为它是远程源。 因此,当我想要为我的团队发布测试内容时,我会做一个

git fetch orgin
git merge origin/master

来自我的测试文件夹。

这次我在开发文件夹中做了一个提交,像往常一样,在测试文件夹中获取并合并,一切正常。

但后来我意识到我已经在其中一个文件上留下了调试,所以我删除了调试行,暂存,并修改了开发文件夹上的上一次提交但是当我尝试在测试目录中获取和合并时,它显示以下消息:

user@machine:/opt/testfolder$ git fetch origin
remote: Counting objects: 47, done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 25 (delta 16), reused 0 (delta 0)
Unpacking objects: 100% (25/25), done.
From /home/user/dev/php/devfolder
 + 4dcc4dd...e48254a master     -> origin/master  (forced update)
user@machine:/opt/testfolder$ git merge origin/master
Merge made by the 'recursive' strategy.

修改后的文件未更新。如果我再试一次,我会得到一个“已经是最新的”。消息。

我该如何解决这个问题? Stackoverflow关于这个主题的问题不是来自ammeded提交。或者至少我找不到任何东西。我也找不到任何关于这种错误的文件来自修改后的提交。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

因此,如果我理解正确,您将直接在repo(/ home / user / dev / php / devfolder)中进行提交,该repo也用作远程。如果是这种情况,那么"规则永远不会在已经推送到远程的提交上重写历史(即--amend)。成为"永远不会改写历史,期间"。这是因为您在/home/user/dev/php/devfolder中进行的每次提交都可以立即考虑"推送",因为其他回购正在从中提取。发生的事情是您使用"调试行"提交了文件。在dev文件夹中,然后拉入您的testfolder。那时候,就git而言,提交是历史的一部分。然后,当您修改devfolder中的提交时,git删除了旧提交并将其替换为新提交(没有调试行)。然后当你再次进入testfolder时,git认为这是一个新的提交,它不是旧提交的直接后代,而是旧提交的同行。 (当您在fetch消息中看到"强制更新"时,您可以判断出某些内容已经崩溃)。因此git合并原始提交和修改后的提交,并在原始提交中看到添加的行,因此将其添加到结果中。

虽然您可以在开发和测试文件夹上使用一系列git reset来解决此问题,但如果其他人从测试文件夹中撤出,则违规更改将继续回来。最好的办法是进行一次删除它的未修改的提交。如果您打算直接在dev文件夹上执行此操作,请务必先将测试拉入dev。

展望未来,我强烈建议您在dev文件夹中创建一个裸存储库,该文件夹仅用作远程文件夹。然后在" local"中进行所有更改。 repo(就像你在测试目录中一样)并推送/拉出裸仓库。

顺便说一句,我可能会选择一个只有你和你的团队用作遥控器的裸仓库,它上面有稳定和开发代码,每个都在不同的分支中,而不是设置你现在有。然后,当您希望您的团队对其进行测试时,您只需将dev分支合并到稳定分支中即可。