Difference between revisions of "Solving conflicts on GitLab"

From mi-linux
Jump to navigationJump to search
m (Protected "Solving conflicts on GitLab" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)))
 
(No difference)

Latest revision as of 11:47, 4 March 2015

Main Page >> GitLab server >> 3. Solving conflicts on GitLab

Solving conflicts

But what happens if 2 developers push a change to the same file? Well, let's take a look.

Let's imagine that our previously created file "page2.html" contains the following, very simple HTML code:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>My second page</title>
  </head>
  <body>
    <h1>This is our second page</h1>
  </body>
</html>

Two developers make a change

Let's imagine that 2 developers "pull" the latest code above, and then both make a slightly different change, as follow (see added paragraph):

Developer 1:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>My second page</title>
  </head>
  <body>
    <h1>This is our second page</h1>
    <p>Some text about something</p>
  </body>
</html>

Developer 2:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>My second page</title>
  </head>
  <body>
    <h1>This is our second page</h1>
    <p>Some other text about something else!</p>
  </body>
</html>

Two developers push their changes

Developer 1 commits his change successfully:

git add page2.html
git commit -m "commit by team member 1"
git push -u origin master

Message displayed:

1 file changed, 1 insertion(+)

Then developer 2 tries to commit too:

git add page2.html
git commit -m "commit by team member 2"
git push -u origin master

But he gets an error message:

error: failed to push some refs to 'https://fsegitlab.wlv.ac.uk/in9352/great-work-by-alix.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.

The Git server tells developer 2 to "pull" the latest code again (which will include the change made by developer 1). Let's do that.

Resolving the conflict

Let's pull the code again:

git pull origin

This time a warning message tells us:

CONFLICT (content): Merge conflict in page2.html
Automatic merge failed; fix conflicts and then commit the result.

Indeed when reopening his local copy of "page2.html", developer 2 is presented with the following:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>My second page</title>
  </head>
  <body>
    <h1>This is our second page</h1>
<<<<<<< HEAD
    <p>Some other text about something else!</p>
=======
    <p>Some text about something</p>
>>>>>>> 8c409afad98a4a8af4ac0f17a3be594802bc5895
  </body>
</html>

As you can see both changes (i.e. both paragraphs) are included, and highlighted by Git. It is up to developer 2 to decide which one to keep and push back to the server. Here a conversation between the 2 developers should take place, and a decision made (for example, merging the wording of the 2 paragraphs!), before the change can be pushed.

Next chapter

Working environments