web-dev-qa-db-ja.com

開発ブランチとマスターをマージする

GitHubリポジトリにmasterdevelopmentの2つのブランチがあります。示されているように、私はすべての開発を開発部門で行っています。

git branch development
git add *
git commit -m "My initial commit message"
git Push -u Origin development

developmentブランチのすべての変更をmasterにマージします。私の現在のアプローチは:

git checkout master 
git merge development
git Push -u Origin master 

私が従っている手順が正しいかどうか私に知らせてください。

581
Pawan

私は一般的にmasterを最初にdevelopmentにマージするのが好きです。そうすれば衝突があってもdevelopmentブランチ自体で解決でき、masterはきれいなままです。

(on branch development)$ git merge master
(resolve any merge conflicts if there are any)
git checkout master
git merge development (there won't be any conflicts now)

2つの方法に大した違いはありませんが、マージした後でまだブランチをmasterにマージしたくない、またはこれらが可能になるまでにまだ多くの作業が必要であることに気付きました。マージしたので、私はmasterを最終的なものになるまで手をつけないままにしておく傾向があります。

編集:コメントから

誰がいつマージを行ったかを追跡したい場合は、マージ中に--no-ffフラグを使用できます。ワークフローでdevelopmentmaster(最初のステップ)に複数回マージする必要があり、これらのコミットノードを作成してもあまり役に立たない場合があるため、これはmasterdevelopment(最後のステップ)にマージする場合にのみ一般的に役立ちます。

git merge --no-ff development
893
Sailesh

個人的には、私のアプローチはあなたのものに似ていますが、それらがマスターに戻るときにいくつかのブランチとコミットのいくつかのスカッシュがあります。

私の同僚の一人は、ブランチをあまり切り替える必要がなく、開発ブランチから実行される次のようなもので開発ブランチに留まります。

git fetch Origin master

git merge master

git Push Origin development:master

最初の行は、彼が自分のローカルリポジトリを最後に更新してからマスターするために行われた上流のコミットがあることを確認します。

2番目はそれらの変更(もしあれば)をマスターから開発に引き込みます

3番目は開発ブランチ(現在はmasterと完全にマージされています)をOrigin/masterにプッシュします。

私は彼の基本的なワークフローを少し間違っているかもしれませんが、それがそれの主な要旨です。

78
David Culp

Git Flowワークフローを使用できれば素晴らしいでしょう。開発ブランチを簡単にマスターにマージできます。

あなたがやりたいことは、ここで述べられているgit flowの指示に従うだけです。

http://danielkummer.github.io/git-flow-cheatsheet/ /

ステップ:

  • git Flowプロジェクトを設定する 
  • ブランチを作成し、すべてをマージして開発する
  • コマンド "git flow release start"を実行してください。
  • それからリリースのために意味のあるメッセージを提供してください
  • コマンド "git flow release finish"を実行してください。
  • それはすべてをmasterにマージしてブランチをmasterに変更します。
  • コマンド "git Push"を実行して、変更内容をリモートマスターに公開します。

詳細については上記のリンクを確認してください。

18
Harsha

枝の知識がなくてもここに来た人のための下からの説明。

基本的なマスターブランチ開発ロジックは次のとおりです。他のブランチでのみ作業し、masterを使用して他のブランチをマージします。

このようにして新しいブランチを作成し始めます。

1)Webルートに必要なリポジトリをクローンします。

$ cd /var/www
$ git clone [email protected]:user_name/repository_name.git

2)新しいブランチを作成してください。それはあなたのマスターブランチリポジトリの最新のファイルを含みます。

$ git branch new_branch

3)gitブランチをnew_branchに変更

$ git checkout new_branch

4)いつもどおりにコーディングを行い、コミットする…

$ git add .
$ git commit -m “Initial commit”
$ git Push (pushes commits only to “new_branch”)

5)このブランチでジョブが終了したら、「master」ブランチとマージします。

$ git merge master
$ git checkout master (goes to master branch)
$ git merge development (merges files in localhost. Master shouldn’t have any  commits ahead, otherwise there will be a need for pull and merging code by hands!)
$ git Push (pushes all “new_branch” commits to both branches - “master” and “new_branch”)
17
Gediminas

はい、これは正しいですが、非常に基本的なワークフローのように見えます。統合の準備が整う前に変更をバッファリングするだけです。 より高度なワークフロー gitがサポートしているものを見てください。 トピックブランチ アプローチは、あなたが並行して複数の機能に取り組むことを可能にします、または 卒業アプローチ はあなたの現在のワークフローを少し拡張します。

8
Sergiu Dumitriu

git pull(現在の開発ブランチ)

gitチェックアウトマスター 

git pull

gitマージ開発

gitプッシュオリジンマスター

7

MacまたはUbuntuを使用している場合は、ブランチの作業フォルダに移動してください。ターミナルで 

harisdevが支店名だとします。 

git checkout master

追跡されていないファイルやコミットされていないファイルがある場合はエラーになり、追跡されていないファイルまたはコミットされていないファイルをすべてコミットまたは削除する必要があります。 

git merge harisdev 

git Push Origin master

ブランチを削除する最後のコマンド。 

$ git branch -d harisdev
4
Haris Np

これが私が通常するやり方です。まず、あなたが自分の変更をmasterにマージする準備ができていることを確認してください。

  1. 開発がgit fetch付きであなたのリモートサーバからの最新の変更で最新であるかどうかチェックしてください
  2. 取り出しが完了したらgit checkout master
  3. git pullを実行して、マスターブランチに最新の更新があることを確認します。
  4. 準備が完了したら、git merge developmentでマージを開始できます。
  5. git Push -u Origin masterで変更をプッシュすれば完了です。

記事の中で git merge についてもっと知ることができます。

4
Nesha Zoric

ステップ1

ローカルのgitファイルがリモートと同期しているが "dev"ブランチがまだ存在しない、新しい "dev"ブランチを作成してそれに切り替えます。

git branch dev # create
git checkout dev # switch
# No need to git add or git commit, the current
# branch's files will be cloned to the new branch by-default.
git Push --set-upstream Origin dev # Push the "dev" branch to the remote.

ステップ2

"dev"ブランチに変更を加え(手順1に従った場合は現在のもの)、コミットしてリモートの "dev"ブランチにプッシュします。

git add .
git commit -S -m "my first commit to the dev branch" # remove the -S if you're not "secure", secure = when you already setup crypto private and public keys (i.e "verified" green sign in github)
git Push -u Origin dev # Push the changes to the remote, -u Origin dev is optional but good to use.

ステップ3

あなたの "dev"ブランチを "master"にマージしてください。

git checkout dev # switch to "dev" branch if you're not already.
git merge master # optionally, this command is being used to resolve any conflicts if you pushed any changes to your "master" but "dev" doesn't have that commit.
git checkout master # switch to "master", which is the branch you want to be merged.
git merge --no-ff dev # merge the "dev" branch into the "master" one.
4
kataras

1)ブランチ開発で、以下のコマンドを使用してgitのステータスを確認してください。

git status

コミットされていないコードはありません。もしそうなら、コードをDevelopmentブランチにプッシュしてください。

git add *

git commit -m "My initial commit message"

git Push Origin Development

2)Developmentブランチで、以下の2つのコマンドを実行します。

git branch -f master HEAD

git Push -f Origin master

それはあなたの開発ブランチコードをマスターブランチにプッシュします。

3

@ Saileshと@ DavidCulpに基づきます。

(on branch development)
$ git fetch Origin master
$ git merge FETCH_HEAD
(resolve any merge conflicts if there are any)
$ git checkout master
$ git merge --no-ff development (there won't be any conflicts now)

最初のコマンドは、アップストリームのすべてのコミットがリモートマスターに対して行われていることを確認します。Saileshの応答は起こりません。

2つ目はマージを実行して競合を発生させ、それを解決することができます。

そうした後、最後にmasterをチェックアウトしてmasterに切り替えることができます。

次に、開発ブランチをローカルマスターにマージします。 no-ffフラグを使用すると、マージ全体を追跡可能にするためにmasterにコミットノードが作成されます。

その後、コミットしてマージをプッシュできます。

この手順では、開発からマスターへのマージコミットがあることを確認し、開発ブランチを見れば、開発中にそのブランチに対して行った個々のコミットを確認できます。

開発ブランチで行われたことの概要を追加したい場合は、プッシュする前にマージコミットを修正することもできます。

編集:私の最初の答えは何もしないgit merge masterを示唆しています、それはOrigin/masterを取得した後にgit merge FETCH_HEADをするのが良い

2
Cisco

開発ブランチを「チェックアウト」したら...

 git add .
 git commit -m "first commit"
 git Push Origin dev
 git merge master

 git checkout master 
 git merge dev
 git Push Origin master 
1
Tiago Medici

あなたがgerritを使っているなら、以下のコマンドは完璧に動作します。

git checkout master
git merge --no-ff development

デフォルトのコミットメッセージで保存できます。変更IDが生成されたことを確認してください。確認するには、次のコマンドを使用できます。

git commit --amend

その後、次のコマンドでプッシュします。

git Push Origin HEAD:refs/for/refs/heads/master

以下のようなエラーメッセージが表示されるかもしれません。

! [remote rejected] HEAD -> refs/for/refs/heads/master (you are not allowed to upload merges)

これを解決するために、gerritプロジェクト管理者は、 'refs/for/refs/heads/master'または 'refs/for/refs/heads/*'という名前の別の参照をgerritに作成する必要があります(将来すべてのブランチをカバーします)。次に、この参照に「プッシュマージコミット」権限を付与し、GCRを送信する必要がある場合は「送信」権限を付与します。

それでは、上記のPushコマンドをもう一度試してみてください。

クレジット:

https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit

https://stackoverflow.com/a/21199818/3877642

0

最も簡単な解決策は

    git checkout master
    git remote update
    git merge Origin/Develop -X theirs
    git commit -m commit -m "New release"
    git Push --recurse-submodules=check --progress "Origin" refs/heads/Master

これはまた、使用中のすべてのブランチの履歴を保存します。

0
Vishal