Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| git_merge [2019/03/07 13:47] – [Setting branch options] rpjday | git_merge [2019/03/13 13:09] (current) – [Global merge.ff option] rpjday | ||
|---|---|---|---|
| Line 333: | Line 333: | ||
| </ | </ | ||
| - | For example, if you wanted to prevent any fast-forward merges to any '' | + | For example, if you wanted to prevent any fast-forward merges to any '' |
| < | < | ||
| $ git config --global branch.master.mergeOptions " | $ git config --global branch.master.mergeOptions " | ||
| + | </ | ||
| + | |||
| + | ==== Global merge.ff option ==== | ||
| + | |||
| + | For merging, there is at least one repo-wide merge option you can set (see '' | ||
| + | |||
| + | < | ||
| + | merge.ff | ||
| + | By default, Git does not create an extra merge commit when | ||
| + | merging a commit that is a descendant of the current | ||
| + | commit. Instead, the tip of the current branch is | ||
| + | fast-forwarded. When set to false, this variable tells Git | ||
| + | to create an extra merge commit in such a case (equivalent | ||
| + | to giving the --no-ff option from the command line). When | ||
| + | set to only, only such fast-forward merges are allowed | ||
| + | (equivalent to giving the --ff-only option from the command | ||
| + | line). | ||
| + | </ | ||
| + | |||
| + | So for widespread fast-forward merge configuration: | ||
| + | |||
| + | < | ||
| + | $ git config --global merge.ff " | ||
| + | </ | ||
| + | |||
| + | This setting is superseded by any per-branch fast-forward merge setting. | ||
| + | |||
| + | ===== Merge strategies ===== | ||
| + | |||
| + | ==== ours ==== | ||
| + | |||
| + | Technically record a merge while totally ignoring its content -- for record-keeping. | ||
| + | |||
| + | Example: | ||
| + | |||
| + | < | ||
| + | $ git checkout master | ||
| + | $ git merge --strategy=ours < | ||
| + | </ | ||
| + | |||
| + | How to make '' | ||
| + | |||
| + | < | ||
| + | $ git checkout topic | ||
| + | $ git merge -s ours master | ||
| + | $ git checkout master | ||
| + | $ git merge --ff-only topic | ||
| + | </ | ||
| + | |||
| + | To do this for an arbitrary commit, create a temporary branch: | ||
| + | |||
| + | < | ||
| + | $ git checkout -b tempbranch <commit ID> | ||
| + | $ git merge -s ours master | ||
| + | $ git checkout master | ||
| + | $ git merge --ff-only tempbranch | ||
| </ | </ | ||