Git merge left HEAD marks in my files

GitGit MergeMerge Conflict-ResolutionGit Merge-Conflict

Git Problem Overview


I tried to merge a file in the command line using Git, when an error message appeared telling me the merge was aborted.

I thought that was the end of it, but then I realized there are gitmarks in my files. Like so:

start =
	expression
	
validchar = 
	[0-9a-zA-Z_?!+\-=@#$%^&*/.]

integer = 
<<<<<<< HEAD
	digits:[0-9]+
		{ return digits.join(""); }
=======
	sign:"-"* digits:[0-9]+
		{ return sign + digits.join(""); }
>>>>>>> gh-pages
	

The files have been edited not by me and show lines inserted with:

  • HEAD after less than signs (<<<<<<< HEAD)
  • lines of changed code
  • a string of equals signs (=======)
  • the new version of the code
  • another line starting with greater than signs and the name of the branch (>>>>>>> gh-pages)

What's worse is that the file contents are no longer in order. Does anyone know how I get those files back to normal, and the changes I made in the gh-branch merged into the master branch?

Git Solutions


Solution 1 - Git

Those are conflict markers. You're still in the process of merging, but there were some parts that Git couldn't merge automatically. You'll need to hand-edit those parts to what you want them to be and then commit the results.


For instance, in your particular case, you'd probably want to resolve it like this (note - the arrows/text on the right are just my notes, not something you'd type into the file):

integer = 
<<<<<<< HEAD                                  <-+ remove the bits here
    digits:[0-9]+                               |
        { return digits.join(""); }             |
=======                                       <-+
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages                              <-- and this

and thus you'd save the file as...

integer = 
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }

Solution 2 - Git

Absolutely start with 'git status' to see what you've got. If you aborted a merge (or had a merge aborted) and you've got conflicted files in the working directory then something went wrong. The Git status will tell you where you are. After that, you have a number of options. You should resolve the merge commit either by-hand, which can be challenging, or using a tool as:

git mergetool

The merge tool will work if your files are listed as needing a merge.

You can also perform one of:

git checkout --ours -- /path/to/conflicted-file       # this is probably the one you want
git checkout --theirs -- /path/to/conflicted-file

You can see the different versions using the :1:filename syntax. See here for an explanation. But all of the above assumes that 'git status' shows the files as needing a merge.

Finally, you always have the option of:

git reset --hard   # sounds like --hard is what you need but check other options

Solution 3 - Git

All of the answers are right but if you want to Autoremove all conflict marks & want to autochange the files to keep HEAD , then You can create your own bash script like :-

Example Script:

# vim /usr/sbin/solve.git

(Append Following)

#!/bin/bash
for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .)
do
sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f
sed -i -e '/^>>>>>>> /d' $f
echo "$f Fixed"
done
git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify

# chmod 755 /usr/sbin/solve.git

& just run it in your GIT repo/path to resolve:

$ cd <path_to_repo>
$ solve.git

Notice:- Above mentioned file extensions are php,css,js,html,svg & txt.

Solution 4 - Git

In Atom i had the issue that some files did not save the resolved merge conflicts to the drive, so i had to manually click "save". Took me quite some time to figure out.

Solution 5 - Git

I'm coming from this question. And I wanted some automated method of merging the half merged files, instead of manually editing the files (as suggested in other answers, which I am not really comfortable doing). So here's what I ended up doing via netbeans, but can be done via command line too.

Now, bear in mind, this only works if immediately after the merge->add->commit, you realised that you messed up, and want to re-go through the process.

STEP 1: Reset to a previous commit.

git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e

STEP 2: Re-Try Merging the branch

git merge --ff origin/feature/YOUR-Branch_here

At this point you shall be prompted with the merging window if you are using a GUI. and you can then proceed as normal.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionlowerkeyView Question on Stackoverflow
Solution 1 - GitAmberView Answer on Stackoverflow
Solution 2 - GitGoZonerView Answer on Stackoverflow
Solution 3 - GitMr. PundirView Answer on Stackoverflow
Solution 4 - GitTimar Ivo BatisView Answer on Stackoverflow
Solution 5 - GitMohd Abdul MujibView Answer on Stackoverflow