web-dev-qa-db-ja.com

Git:マスターファイルをブランチで自動的に上書きするように選択しながら、マスターにマージ

私はドキュメントラテックスソースを追跡するためにGitを使用しています。マスターブランチをエンドユーザーのリリースに適したドキュメントで一杯にしたいので、誰かが何かを必要とするときは、マスターブランチに切り替えて、ドキュメントをコンパイルして配布することができます。

マニュアルのメジャーアップデートが必要な場合は、新しいブランチを作成します。しかし、マニュアルが承認されると、マスターにマージする必要があります。 branchからmasterにマージするとき、Gitにコマンドを渡して、「マージを忘れて、 branchのファイルをmasterのファイルに上書きします。 "これを行う方法はありますか?具体的には、毎回マージツールを開かないようにしたいと思います。前もって感謝します。

44
Mica

masterを無視するには、branchをチェックアウトしている場合:

git merge master --strategy=ours

http://schacon.github.com/git/git-merge.html

「コンピューター言語学者」がここでコメントしたように、これは「それが新しい独立したファイルへの変更を持っている場合でも、「マスター」からのすべてを無視します」。したがって、OPではなく、OPが「マージを忘れる」とは言わないほど安全なマージが必要な場合は、「コンピューターリンギスト」からのこの優れた安全なコマンドを使用し、さらに彼のコメントをアップして、信用を得ます。

git merge -s recursive -X theirs branch
61
Robert

Gitのバージョン1.7.1では、「-Xtheirs」を使用してブランチ自体にマージできます。

たとえば、masterブランチで開始する場合、masterで開始します

git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git merge -Xtheirs editBranch

私がこれに基づいてこれを行うことを見たもう1つの方法 この投稿 は、editBranchをハードリセットすることです。例えば:

git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git reset --hard editBranch

この2番目の方法の方がいいかもしれませんが、まだ十分に遊ぶ機会がありません。

15
Alan W. Smith

私たちは「私たちの」マージ戦略でこれを行うことができると思います:

git checkout branch
git merge -s ours master

しかし、これはあなたが望むことを正確に行うわけではありません:current作業ブランチbranchの内容を上書きし、あなたがしたいことは同じ内容をmasterに取得します。あなたが本当に望んでいるのは、マージ戦略theirsです。そのために、私は この同様の質問 にそれを行う方法を指摘します。実際には、masterをリセットしてbranchを指すようにします。

2
quark