我试图将dev分支合并为master。
git checkout master
git pull . dev
一切似乎进展顺利,虽然有冲突我修好了这些并且承诺了。但是当我检查这个新合并的工作树时,缺少来自开发的很多文件夹和文件。
git status // Shows conflicts & doesn't list some files/folders.
git commit -a
Created commit 55ffdd1: Merge branch 'dev' into master
git diff dev --name-status
产地:
D folders/lm.gif
D folders/lmh.gif
...
所以没有出现在'git status'上的文件/文件夹。当我修复合并的冲突时,它也没有出现在最后。
当我再次尝试合并时,它说:
git merge dev
Already up-to-date.
然而,master分支显然缺少dev分支中的文件/文件夹。这是为什么?不应该添加该文件夹及其所有内容吗?在dev分支上正在跟踪'文件夹',所以当我合并时它不应该被拉过来吗?
当先前发生合并冲突时,git会停止合并过程并跳过一堆文件/文件夹吗?
开发分支有很多变化,过去我可以用git弄乱一些东西,现在某些文件/文件夹不会合并吗?
(当我第一次创建开发分支时,我不知道我在做什么,并且做了重置,恢复等疯狂的事情。)
希望你们中的一个git guru在这里堆栈溢出知道答案。 :)
谢谢, 广
感谢沃尔特,是的,这就是发生的事。
在做了一些调查之后,我发现发生的事情有点复杂。事实证明。
希望这能帮助我以外的人,他们学到了很多关于如何使用git log,git show,git reflog试图调试发生的事情。
谢谢!
所以我这样做是为了将以前删除的dev中的所有内容合并到master中。
git diff dev --name-status | grep D > deleted_files
git log --name-status > file_history
将使用此列表来确定已删除文件的最新更新版本。git checkout 25b8a44 view.php
25b8a44 ...是view.php的最新更新版本的提交。我尝试了cherry-pick
并且直接git checkout dev view.php
但我发现显式使用了提交ID,它合并了更多的历史记录。 (包括首先导致文件被删除的提交。)git diff dev --name-status | grep D
显示所有文件都已复制完毕。然后像沃尔特所说的那样提交了git commit --amend
:)答案 0 :(得分:19)
听起来git认为丢失的文件在主服务器上从dev开始分支和合并前头部之间的某个时刻被删除了。这是我能想到为什么git会在合并期间默默地丢弃跟踪文件的唯一原因。
不幸的是,我不知道解决这个问题的好办法。我可能只是手动(或者使用一点bash脚本)从dev分支中重新添加所有已删除的文件,然后再到git commit --amend
修改合并提交以包含它们。