55874


git初心者です。

gitのpullで削除はmergeさせず、追加だけmergeさせたいです。

まずやったことを順を追って説明します。  
1.masterブランチを作成する。  
2.masterブランチでsample1.txtを作成する。  
3.masterブランチからtestブランチを作成する。  
4.testブランチでsample1.txtを消して、sample2.txtを作成する。  
5.masterブランチにcheckoutする。  
6.masterブランチにtestブランチをmergeする。

↑ 6.の時にsample1.txtを残したままsample2.txtをmasterにpullしたいです。

何か方法はあるでしょうか？


CC BY-SA 4.0
2019-06-17T06:19:30.607
55873
2019-06-17T10:02:57.757
29047
question
git
gitのpullで追加分だけmergeしたい


前提として`git pull`は裏で`fetch + merge`を行うので、自動で変更をmergeされて困る場合は  
まず`git fetch`で内容を確認してからmergeを行う必要があります。

* * *

他のブランチの変更(コミット)のうち、一部のファイルのみ取り込みたい場合には`git
checkout`でブランチ名と対象のファイル名を指定すればよいみたいです。

[code]

    git checkout <ブランチ名> -- <ファイル名>
    
[/code]

今回の場合であればmasterブランチ上で以下のコマンドを実行すれば、testブランチのsample2.txtのみをチェックアウトすることができるはずです。

[code]

    git checkout test -- sample2.txt
    
[/code]

参考：  
[Git 1ファイルだけ別のブランチから持ってくる -
Qiita](https://qiita.com/oret/items/b646fcada9d89ed308c4)


CC BY-SA 4.0
2019-06-17T07:30:05.337
55874
2019-06-17T07:30:05.337
3060
55873
answer


見た人を混乱させるだけなので **絶対に行うべきではない** と考えますが、やろうと思えば所望のmerge操作は行えます。

> 6.masterブランチにtestブランチをmergeする。

で、[`--no-commit`](https://git-scm.com/docs/git-merge#Documentation/git-
merge.txt---no-commit)オプションを付ければコミット直前で停止できます。

[code]

    git merge --no-ff --no-commit test
    
[/code]

ので、このタイミングで `sample1.txt` の削除操作を取り消せば所望のmerge動作になります。

[code]

    git reset -- sample1.txt
    git merge --continue
    
[/code]

(`push`/`pull` が手順1-6のどこで関わってくるのか不明確だったので`master`,
`test`ブランチともローカルブランチとして書いていますが、`pull` にも[同じオプションがあり](https://git-
scm.com/docs/git-pull#Documentation/git-pull.txt---no-commit)、考え方は同じです。)

* * *

行おうとしていることがそもそも"マージ"ではないので、`merge`コマンド以外で解決するのが妥当な考え方かと思います。

あるいは、`test`ブランチの改変が許されるのであれば、

> 4.testブランチでsample1.txtを消して、sample2.txtを作成する。

のコミットを

  1. `sample2.txt` を作成するコミット
  2. `sample1.txt` を消すコミット

の2つに分け、1つめのコミットだけを`master`にマージすることでも対応できるかと思います。


CC BY-SA 4.0
2019-06-17T10:02:57.757
55881
2019-06-17T10:02:57.757
2808
55873
answer