GitHubリポジトリにmaster
とdevelopment
の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
私が従っている手順が正しいかどうか私に知らせてください。
私は一般的に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
フラグを使用できます。ワークフローでdevelopment
をmaster
(最初のステップ)に複数回マージする必要があり、これらのコミットノードを作成してもあまり役に立たない場合があるため、これはmaster
をdevelopment
(最後のステップ)にマージする場合にのみ一般的に役立ちます。
git merge --no-ff development
個人的には、私のアプローチはあなたのものに似ていますが、それらがマスターに戻るときにいくつかのブランチとコミットのいくつかのスカッシュがあります。
私の同僚の一人は、ブランチをあまり切り替える必要がなく、開発ブランチから実行される次のようなもので開発ブランチに留まります。
git fetch Origin master
git merge master
git Push Origin development:master
最初の行は、彼が自分のローカルリポジトリを最後に更新してからマスターするために行われた上流のコミットがあることを確認します。
2番目はそれらの変更(もしあれば)をマスターから開発に引き込みます
3番目は開発ブランチ(現在はmasterと完全にマージされています)をOrigin/masterにプッシュします。
私は彼の基本的なワークフローを少し間違っているかもしれませんが、それがそれの主な要旨です。
Git Flowワークフローを使用できれば素晴らしいでしょう。開発ブランチを簡単にマスターにマージできます。
あなたがやりたいことは、ここで述べられているgit flowの指示に従うだけです。
http://danielkummer.github.io/git-flow-cheatsheet/ /
ステップ:
詳細については上記のリンクを確認してください。
枝の知識がなくてもここに来た人のための下からの説明。
基本的なマスターブランチ開発ロジックは次のとおりです。他のブランチでのみ作業し、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”)
はい、これは正しいですが、非常に基本的なワークフローのように見えます。統合の準備が整う前に変更をバッファリングするだけです。 より高度なワークフロー gitがサポートしているものを見てください。 トピックブランチ アプローチは、あなたが並行して複数の機能に取り組むことを可能にします、または 卒業アプローチ はあなたの現在のワークフローを少し拡張します。
git pull(現在の開発ブランチ)
gitチェックアウトマスター
git pull
gitマージ開発
gitプッシュオリジンマスター
MacまたはUbuntuを使用している場合は、ブランチの作業フォルダに移動してください。ターミナルで
harisdevが支店名だとします。
git checkout master
追跡されていないファイルやコミットされていないファイルがある場合はエラーになり、追跡されていないファイルまたはコミットされていないファイルをすべてコミットまたは削除する必要があります。
git merge harisdev
git Push Origin master
ブランチを削除する最後のコマンド。
$ git branch -d harisdev
これが私が通常するやり方です。まず、あなたが自分の変更をmasterにマージする準備ができていることを確認してください。
git fetch
付きであなたのリモートサーバからの最新の変更で最新であるかどうかチェックしてくださいgit checkout master
。git pull
を実行して、マスターブランチに最新の更新があることを確認します。git merge development
でマージを開始できます。git Push -u Origin master
で変更をプッシュすれば完了です。記事の中で git merge についてもっと知ることができます。
ステップ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.
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
それはあなたの開発ブランチコードをマスターブランチにプッシュします。
@ 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
をするのが良い
開発ブランチを「チェックアウト」したら...
git add .
git commit -m "first commit"
git Push Origin dev
git merge master
git checkout master
git merge dev
git Push Origin master
あなたが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
最も簡単な解決策は
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
これはまた、使用中のすべてのブランチの履歴を保存します。