Git/merge: Difference between revisions

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
< Git
Created page with "'''Action''': join two or more development histories together "Incorporates changes from the named {{l/same|commit}}s (since the time their histories diverged from the curre..."
 
I think I understand more about how this works now, so clarifying my explanation.
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''Action''':  join two or more development histories together
==About==
'''Action''':  join two or more {{l/same|branch}}es together


"Incorporates changes from the named {{l/same|commit}}s (since the time their histories diverged from the current {{l/same|branch}}) into the current branch. This command is used by [[../pull|git pull]] to incorporate changes from another repository and can be used by hand to merge changes from one branch into another."
In its simplest form, '''git merge''' lets you assimilate {changes that were {{l/same|commit}}ted to another branch} into the current branch:
==Links==
 
* <code>git checkout {{arg|current-branch}}</code> - just to be sure we're starting with no uncommitted changes (a "clean" state)
* <code>git merge {{arg|other-branch}}</code> - assimilate changes from {{arg|other-branch}} into this one
 
This is also done (or attempted) automatically when {{l/same|pull}} is used.
 
Things to remember:
* It's better to have all changes committed before you try a merge.
* If the merge fails, you can "back out" with <code>git merge --abort</code>.
* If things get too ugly and you just want to revert to a known state, <code>git {{l/same|reset}} --hard {{arg|commit}}</code> blows away all uncommitted changes and reverts to the given commit.
** Note: I think "commit" might refer to a specific hash value, not a branch name.
==Process==
If a merge attempt is not successful, the local file will be marked up with notes indicating the differences between versions. The markup format seems to be:
: <<<<<<< HEAD
: ''text of local version''
: =======
: ''text of remote version''
: >>>>>>> ''long hexadecimal identifier''
 
(Tentatively:) If you attempt a commit while any of these markers are still in place, Git will refuse to commit and will list the files with unresolved differences.
===Auto-Merge===
During a <code>{{l/same|pull}}</code>:
* Git will attempt to "auto-merge" each conflicting file (i.e. merge from the remote branch into the current one).
* For each file, there will be a message saying whether the merge was successful (as above).
==Outlinks==
===Documentation===
===Documentation===
* [https://www.kernel.org/pub/software/scm/git/docs/git-merge.html manpage @ kernel.org]
* [https://www.kernel.org/pub/software/scm/git/docs/git-merge.html manpage @ kernel.org]
===How To===
* [http://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging 3.2 Git Branching - Basic Branching and Merging]
* [http://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging 7.8 Git Tools - Advanced Merging]

Latest revision as of 10:44, 19 July 2018

About

Action: join two or more branches together

In its simplest form, git merge lets you assimilate {changes that were committed to another branch} into the current branch:

  • git checkout <current-branch> - just to be sure we're starting with no uncommitted changes (a "clean" state)
  • git merge <other-branch> - assimilate changes from <other-branch> into this one

This is also done (or attempted) automatically when pull is used.

Things to remember:

  • It's better to have all changes committed before you try a merge.
  • If the merge fails, you can "back out" with git merge --abort.
  • If things get too ugly and you just want to revert to a known state, git reset --hard <commit> blows away all uncommitted changes and reverts to the given commit.
    • Note: I think "commit" might refer to a specific hash value, not a branch name.

Process

If a merge attempt is not successful, the local file will be marked up with notes indicating the differences between versions. The markup format seems to be:

<<<<<<< HEAD
text of local version
=======
text of remote version
>>>>>>> long hexadecimal identifier

(Tentatively:) If you attempt a commit while any of these markers are still in place, Git will refuse to commit and will list the files with unresolved differences.

Auto-Merge

During a pull:

  • Git will attempt to "auto-merge" each conflicting file (i.e. merge from the remote branch into the current one).
  • For each file, there will be a message saying whether the merge was successful (as above).

Documentation

How To