I was trying to merge a dev branch into master.
git checkout master
git pull . dev
Everything seemed to go well, although there were conflicts I fixed these and commited. But when I checked this newly merged working tree is missing a lot of folders and files from 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
Produces:
D folders/lm.gif
D folders/lmh.gif
...
So the files/folders that didn't show up on 'git status'. It also didn't show up at the end when I fixed the merged conflicts.
Also when I try to merge again it says:
git merge dev
Already up-to-date.
Yet the master branch clearly is missing files/folders from the dev branch. Why is that? Shouldn't that folder and all it's contents be added? 'folders' is being tracked on the dev branch, so shouldn't it have gotten pulled over when I did the merge?
When there was a merge conflict earlier did git stop the merge process and skipped a bunch of files/folders?
The dev branch had quite a lot of changes, could I have messed something up with git in the past that now certain files/folders wouldn't have merged?
(When I first created the dev branch I didn't know what I was doing and did crazy things like reset, reverts etc.)
Hoping one of you git guru's here on stack overflow knows the answer. :)
Thanks, Quang
Thanks Walter, Yes this is what happened.
After doing some investigating I found out it was a little complicated what happened. It turned out that.
Hope this helped someone besides me who learned quite a lot about how to use git log, git show, git reflog trying to debug what happened.
Thanks!
So this is what I did to merge all of the contents in dev that was previously deleted back onto master.
git diff dev --name-status | grep D > deleted_files
git log --name-status > file_history
Gonna be using this to figure out the last updated version of the deleted file.git checkout 25b8a44 view.php
25b8a44... was the commit with the last updated version of view.php. I tried cherry-pick
and just a straight git checkout dev view.php
but i found explicitly using the commit id, it merge more of it's history. (Including the commit that cause the file to be deleted in the first place.)git diff dev --name-status | grep D
shows that all files are copied over. Then like Walter said an ammend commit git commit --amend
:)It sounds like git thinks that the missing files were deleted on the master at some point between where it branches from dev and the pre-merge head. That's the only reason I can think of for why git would silently drop tracked files during a merge.
Unfortunately, I don't know a good way to fix that. I'd probably just re-add all the deleted files from the dev branch manually (or with a little bit of bash scripting), and then to a git commit --amend
to revise the merge commit to include them.