Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
git_merge [2019/03/07 10:25] – [Fast-forwarding] rpjdaygit_merge [2019/03/13 13:09] (current) – [Global merge.ff option] rpjday
Line 247: Line 247:
 </code> </code>
  
-You may or may not want that;+You may or may not want that:
  
 <code> <code>
Line 319: Line 319:
 </code> </code>
  
-===== Setting branch options =====+===== Setting merge options =====
  
-You can set //per-branch// merge options as explained [[https://stackoverflow.com/questions/37352976/how-to-make-squash-default-on-a-merge|here]]:+==== Per-branch merge options ==== 
 + 
 +From ''man git-config'', you can set (either locally or globally) //per-branch// merge options:
  
 <code> <code>
-$ git config --global branch.master.mergeOptions "--squash"+branch.<name>.mergeOptions 
 +    Sets default options for merging into branch <name>. The 
 +    syntax and supported options are the same as those of git- 
 +    merge(1), but option values containing whitespace 
 +    characters are currently not supported. 
 +</code> 
 + 
 +For example, if you wanted to prevent any fast-forward merges to any ''master'' branch across all of your repositories, you could: 
 + 
 +<code> 
 +$ git config --global branch.master.mergeOptions "--no-ff" 
 +</code> 
 + 
 +==== Global merge.ff option ==== 
 + 
 +For merging, there is at least one repo-wide merge option you can set (see ''man git-merge''): 
 + 
 +<code> 
 +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). 
 +</code> 
 + 
 +So for widespread fast-forward merge configuration: 
 + 
 +<code> 
 +$ git config --global merge.ff "true" 
 +</code> 
 + 
 +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: 
 + 
 +<code> 
 +$ git checkout master 
 +$ git merge --strategy=ours <obsolete branch> 
 +</code> 
 + 
 +How to make ''master'' look exactly like ''develop'': 
 + 
 +<code> 
 +$ git checkout topic 
 +$ git merge -s ours master 
 +$ git checkout master 
 +$ git merge --ff-only topic 
 +</code> 
 + 
 +To do this for an arbitrary commit, create a temporary branch: 
 + 
 +<code> 
 +$ git checkout -b tempbranch <commit ID> 
 +$ git merge -s ours master 
 +$ git checkout master 
 +$ git merge --ff-only tempbranch
 </code> </code>
  • git_merge.1551954333.txt.gz
  • Last modified: 2019/03/07 10:25
  • by rpjday