問題タブ [squash]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 連続するコミットオブジェクトを 1 つに押しつぶす方法は?
私のgitオブジェクトグラフは以下のようになります。2fb14b7
コミット、39224ad
、fe9252d
、および3e7a060
を 1 つのコミットにまとめたいと考えています。
以下は私が試したものです(なぜ機能しないのかわかりませんでした)。
Q1. なぜこれはスカッシュしないのですか?
Q2. これは私のリポジトリに何をしますか?
git - --no-ff および --squash を使用した git マージ
http://nvie.com/posts/a-successful-git-branching-model/で説明されているように、リポジトリでブランチを管理する git フローの方法を使用しています。
したがって、使用するコマンドのシーケンスは次のようになります。
ただし、場合によっては、別の方法でやりたいことが 1 つあります。
機能ブランチ ( ) のすべてのコミットを保持したいのですが、mybranch
にマージするときにそれらを 1 つの diff にまとめて (または押しつぶして)もらいたいと考えていますdevelop
。
したがって、これはコマンドのシーケンスが次のようになるべきだと私が考えるものです。
--no-ff
と組み合わせると、間違ったことをする--squash
でしょうか?
これを試すのをためらっているのは、「スカッシング」と「履歴の保存」がどのように直交する要件であるかに起因します-履歴を変更せずにすべてのコミット (マージを含む) を 1 つのコミットにスカッシングするを参照してください
mybranch
私の理論的根拠は、あるブランチ ( ) で履歴を保存し、別のブランチ ( ) で suqashを保存したいということですdevelop
--> これらのアクションは別々のブランチで実行されるため、これで問題ありません。
git - git merge --no-ff と git merge --squash の違いは何ですか
私は小さなチームで「マージ ワークフロー」を使用して作業してきましたが、最近、Sandofsky の記事に従って「リベース ワークフロー」に切り替えました。
現在のワークフロー:
- git checkout マスター、git pull オリジン マスター
- git checkout -b feature_branch、いくつかの作業を行い、git commit -am "msg for feature branch"
- git チェックアウト マスター、git プル元マスター、git リベース マスター feature_branch
- git チェックアウト マスター、git マージ --squash
- git commit -am "マスターブランチのメッセージ", git push origin master
フィーチャー ブランチをリベースした後、マスターにスカッシュ マージします。代わりに --no-ff を使用するとどうなるでしょうか? git merge --squash
とはどう違いgit merge --no-ff
ますか?
git - 「Git rebase」がコミットを次のコミットではなく、前のコミットにスカッシュするのはなぜですか?
ブランチでコミットを (git rebase -i を使用して) スカッシュすると、スカッシュされたコミットが新しいコミットではなく古いコミットと結合されることにいつも悩まされます。
なぜこのように設計されたのか理解できません。進行中の作業 (WIP) をコミットすると、それはコンパイルされていないコードまたは完成していないコードを表します。やっとコミットしたら「やっと動く!」マージする前に commit と squash を行う必要があるため、これらの WIP コミットを組み合わせて「やっと動く!」以前のコミットと結合されるのではなく、コミットします。WIP を押しつぶすと、基本的に、コンパイルできないことがわかっているコードで以前のコミットが「中断」されます。
これを回避するために、私のワークフローは、「それは機能します!」からコミットを押しつぶすことです。最初の WIP コミットの前にさかのぼります。しかし、これはばかげていませんか?WIP を以前のコミットに押しつぶすことが理にかなっている他の人々は何をしていますか?
git - Squash はコンフリクトなしでコミットします。AKA 強制スカッシュ
私はたくさんのコミットを行ってきましたが、コミットは 1 つしかないはずです。プッシュしたいのは最新のコミットですが、すべてを 1 つのコミットにまとめる必要があります。試しrebase -i
てみると、大量のマージ競合に対処する必要があります。
コードを最新のコミットに保持しながら、コミットを1つのメッセージに押しつぶす方法はありますか?
基本的に、競合がある場合は、最新のコミットが毎回勝つようにしたいだけです。どうすればこれを達成できますか?