最適なオプション
おそらく、最もクリーンで混乱が少なく、最も安全な方法で、非ベアリモートリポジトリにプッシュするには、ラップトップのブランチを表すリモートの専用ブランチにプッシュします。
最も単純なケースを見てみましょう。各レポにマスターが1つだけあると想定します。ラップトップからリモートリポジトリにプッシュするときは、マスター->マスターではなく、マスター->ラップトップマスター(または同様の名前)をプッシュします。この方法では、プッシュはリモートリポジトリの現在チェックアウトされているマスターブランチに影響しません。ラップトップからこれを行うには、コマンドはかなり簡単です:
git push origin master:laptop-master
これは、ローカルマスターブランチがリモートリポジトリの「laptop-master」というブランチにプッシュされることを意味します。リモートリポジトリには、「ラップトップマスター」という名前の新しいブランチがあり、準備ができたらリモートマスターにマージできます。
代替オプション
マスター->マスターをプッシュすることも可能ですが、非ベアリポジトリの現在チェックアウトされているブランチにプッシュすることはお勧めできません。何が起こっているのか理解していないと混乱する可能性があるためです。これは、チェックアウトされたブランチにプッシュしてもワークツリーが更新されないため、プッシュされたチェックアウトされたブランチをチェックインするgit status
と、最後にプッシュされたブランチとは正反対の違いが表示されるためです。プッシュが行われる前に作業ツリーが汚れていた場合は特に混乱します。これが推奨されない大きな理由です。
マスター->マスターをプッシュするだけの場合、コマンドは次のとおりです。
git push origin
しかし、リモートリポジトリに戻ったときgit reset --hard HEAD
は、プッシュされたコンテンツと作業ツリーを同期させるためにa を実行したいと思うでしょう。これは危険な場合があります。リモートワークツリーにコミットされていない変更があり、それを保持したい場合は、それらが消去されてしまうためです。これを試す前に、これがどのような結果をもたらすかを理解しておくか、少なくとも最初にバックアップを作成してください。
編集 Git 2.3以降では、「push-to-deploy」git push:https : //github.com/blog/1957-git-2-3-has-been-releasedを使用できます。しかし、別のブランチにプッシュしてからマージするほうが、実際にマージを行うため、通常はより優れています(したがって、マージと同様にコミットされていない変更でも機能します)。