Today I was using Git and something happened to me which I didn't know how to deal with.
I was on branch development
, and I did git fetch
to get the new origin/master
. I wanted to merge origin/master
into master
, and end up with the updated master
checked out. Normally, I would do this:
git checkout master
git pull
But there was a problem; the currently checked-out branch development
had a .gitignore
which included a lot of files that the old master
didn't. The old master
had these files version-controlled. So Git wouldn't let me checkout master
, because then these files would be overwritten.
I didn't know what to do, so I simply checked out origin/master
instead.
If there was a way to merge origin/master
into master
without checking out master
, I think that would have saved me. (And it was a fast-forward merge, so Merge-Fail wasn't an option.)
What can I do about this?
Fully-fledged merge requires work tree to resolve conflicts.
If you know that merge is fast-forward, you can use git update-ref
Example:
git update-ref -m "Fast-forward merge" refs/heads/master refs/remotes/origin/master
Don't do just git update-ref master
, as it will create "master" in .git/
instead of .git/refs/heads/
(refs/remotes/origin/master
can be abbreviated to origin/master
)
I usually delete all the newly ignored files from the working tree in that case, so the checkout
won't be overwriting them any more. git clean
can help you with that. You might also look at the -f
or -m
options of checkout
for other ways to do it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With