私はmasterから分岐し、新しいbranch branchAで働いていました。私はbranchAでいくつかのコミットを行い、今度はmasterをmergeしてbranchAに入れて、最新の変更で更新してください。今私はマスターに合併する前に私のコミットを1つのコミットにスカッシュしたいのですが、どうすればいいですか?私はgit merge --squash
がコミットを押しつぶすことができることを知っています。しかし、私はコードレビューの承認を待っているので、今はマージしたくありません。 masterをbranchAにマージしたので、リベースも使うのは良いことではありません。コミットをスムーズにする良い方法があるのだろうかと思っています。ありがとう!マスターにマージする前にコミットをスクラッシュする方法は?
答えて
更新:追加されましたコメントbranch
だからあなたが持っている
X --- X --- X --- X --- X <--(master)
\ \
A --- B --- M1 --- C <--(branch)
それはあなたが完了したらのように聞こえるあなたは欲しい
X --- X --- X --- X --- X --- ABC <--(master)
ABC
をmaster
ブランチに配置する準備ができていません。
私はA
,B
,M1
およびC
が一度も押されていないと仮定します。この仮定が偽であれば、私はそれらをどのような方法でも潰さないでしょう。
私の最初の考えは、コードレビューを待ってから、その後にスカッシュマージを行うことです。 A
... C
が破棄されることになっている場合、どのような違いがありますか?
しかし、あなたはいくつかの理由でそれを好きではないとが本当にがどのようにこれを目指しについて、-スカッシュを事前にしたい場合は:これに取得するには、いくつかの方法があります
X --- X --- X --- X --- X <--(master)
\
ABC <--(branch)
。ここでは一つだ:
git checkout master
git checkout -b temp
git merge --squash branch
git branch -f branch
git checkout branch
git branch -d temp
しかし、コメント欄での議論に基づいて、それは今A
、B
のように聞こえる、とC
コミットはプッシュされています。それが本当であれば、のいずれかを押しつぶす方法には欠点があります。
その場合の私のベストアドバイスは、そのままマージし、マージコミットに良いコミットメッセージを書いて、ヒストリを見るとgit log --first-parent
を使用することです。この場合、ブランチ上の個々のコミットはログ出力に表示されず、ブランチ全体を表す単一のコミット(マージ自体)がsquashedされたコミットのように見えます。
しかし、あなたがそのアドバイスに従うことを望まない場合、本当に変更を盛り込む必要がある場合、ここでは対処が必要です。branch
で作業を続ける人は問題があります。そして、 "誰もそれをしてはいけない"と言うことができます。もしあなたのチームが誰もそれをしないと同意すれば、それはうまくいくでしょう。しかし、branch
が共有リポジトリに存在するため、何も起こりません。 最高であなたは面倒な紛争解決に対処しなければならないでしょう。
上記の手順を実行したとします。何本当にを持っていることは、あなたがbranch
をプッシュしようとした場合(origin/branch
がbranch
から到達可能ではないので)、それは失敗します
X --- X --- X --- X --- X <--(master)
\ \ \
\ \ ABC <--(branch)
\ \
A --- B --- M1 --- C <--(origin/branch)
です。プッシュを強制することができますし、できるだけ早くC
を指すローカルのbranch
参照を持つ人は問題が発生します。彼らは訂正することはできませんが、特に誰かが間違った方法で "修正"した場合、面倒になる可能性があります。
branch
を強制的に押すことを避けることができます。 branch
のバージョンをマスターにマージしてから、master
を押してローカルのbranch
を削除してください。
X --- X --- X --- X --- X --- ABC <--(master)
\ \
A --- B --- M1 --- C <--(origin/branch)
は今、あなたがリモートorigin/branch
参照の削除を強制しても、他の開発者はまだはローカルbranch
参照がC
で指摘している可能性があります。そしてその履歴はmaster
にマージされていないので(ABC
はマージされていない単一のマージでマスタを更新するために作成されたものです)、branch
をmaster
にマージするとさらに問題になります。
"ours"という戦略を使ってフォローアップマージを行うと、branch
が祖先であるmaster
というGitを表示することができますが、その時点で通常のマージバック通常のマージの場合と同じように、A
、B
、およびC
がデフォルトのログ履歴にmaster
というように表示されます(除外する場合は--first-parent
となります)。
この場合も、これはすべてです。を管理してください。それは不必要な面倒です。なぜなら、ベストプラクティスは、コミットが共有されると、それを履歴の一部にすることができるからです。
- 1. マスターをマージする方法
- 2. マスターにマージする前にサブブランチをマージする
- 3. git - マスターにマージする前に複雑なブランチをクリーンアップする方法は?
- 4. コミットを元に戻さずにマスターをマージする
- 5. GIT:リモートリポジトリにプッシュされた複数のコミットをスクラッシュする方法は?
- 6. コミットを以前のコミットにマージするには?
- 7. メンテナンス分岐のコミットをGerritのマスターにマージするベストプラクティス
- 8. マスターにコミットする前にIntelliJに警告する
- 9. Git:コミットを逆マージする方法は?
- 10. Gitはマージの前にコミットします
- 11. フェッチの結果をマスターにマージする方法は?
- 12. GIT:ブランチ上のすべてのコミットをスクラッシュしてからマスタにマージすると、マスタからの以前のマージはどうなりますか?
- 13. マージの前にコミットからブランチを作成するには?
- 14. 大量のコミットをマスターする前にマージされたgitブランチをunmerge/removeする
- 15. マスターから別のブランチにコミットを除外する方法
- 16. マスターでコミットをキャンセルしてブランチに移動する方法
- 17. Gerritコードレビューでコミットをマージする方法
- 18. プルリクエストが開かれた後にコミットをスクラッシュする方法はありますか?
- 19. ブランチをマスターにマージする場合
- 20. 複数のブランチコミットをマスターにマージする
- 21. Git:マスターを新しいブランチにマージしてマスターをクリアする
- 22. ブランチスカッシュをマスターにマージし、ブランチにマージする
- 23. gitブランチがさらにコミット/マージするのを防ぐ方法
- 24. 古いmercurialのコミットを1つにマージする方法
- 25. 既にマージされたコミットをrebaseする方法
- 26. マスターリポジトリへのコミットをgitlabフォークにマージ/プッシュする方法
- 27. gitのブランチに最新のマージをコミットする方法
- 28. マージの前にGitコミットのメッセージを修正する
- 29. Springデータ、保存する前にエンティティをマージする方法は?
- 30. gitがマスターからローカルブランチにマージする
あなたはすでにあなたが既に公表したように、あなたはすでに審査のためにコミットを送ったと言いました - それはあまりにもスカッシュのために遅刻ではありませんか?新しいブランチを作成し、レビューのためにそれをプッシュして、以前のレビュー要求を破棄したり、リモートサーバ上で許可されている場合は、--forceを押してスクワッシュを押してプッシュすることができます。あなたの場所での「レビュー」の意味によっては、コミットメッセージの明快さ、内容のコミットなども含まれます。 –
@ArkadiuszDrabczykはい、公開されました。しかし、マスターにマージされる前に、ただ一つのきれいなコミットをしたいです。 – litaoshen