[解決済み] merge --squashとrebaseの違いは何ですか?
質問
私はgitの初心者なのですが、squashとrebaseの違いを理解しようと思っています。 私の理解では、リベースの際にスクワッシュを実行するのですよね。
どのように解決するのですか?
両方
git merge --squash
と
git rebase --interactive
は "squashed" コミットを生成することができます。しかし、これらは異なる目的で使用されます。
は、マージ関係をマークせずに、宛先ブランチ上でつぶされたコミットを生成します。
(注意: これはすぐにコミットを生成するわけではありません。
git commit -m "squash branch"
)
これは、ソースブランチを完全に捨てて、(スキーマの取得元である) SO質問 ):
git checkout stable
X stable
/
a---b---c---d---e---f---g tmp
になります。
git merge --squash tmp
git commit -m "squash tmp"
# In the following graph, G is c--d--e--f--g squashed together
X-------------G stable
/
a---b---c---d---e---f---g tmp
を削除し
tmp
のブランチを作成します。
注
git merge
には
--commit
オプション
とは併用できません。
--squash
. それは
決して
を使用することができます。
--commit
と
--squash
を一緒にしています。
Git 2.22.1(2019年第3四半期)以降、この非互換性は明示されるようになりました。
参照
コミット 1d14d0c
(2019年5月24日)による
ヴィシャール・ヴェルマ (
reloadbrain
)
.
(によって統合されました。
ジュニオ・C・ハマノ--。
gitster
--
で
コミット 33f2790
, 2019年7月25日)
merge
拒否
--commit
と
--squash
以前は
--squash
が供給された場合、'option_commit
は無言で を削除しました。を上書きしようとしたユーザーを驚かせたかもしれない。 を使用したスクワッシュのノーコミット動作は--commit
を明示的に指定します。
git/git
builtin/merge.c#cmd_merge()
が含まれるようになりました。
if (option_commit > 0)
die(_("You cannot combine --squash with --commit."));
は、あなたのコミットの一部あるいは全部を新しいベースで再生し、スクショ(最近では "fix up"、以下参照)を可能にします。 SO質問 に直接行く)。
git checkout tmp
git rebase -i stable
stable
X----------------G tmp
/
a---b
のすべてのコミットを破棄することを選択した場合。
tmp
(しかし、逆に
merge --squash
あるものは再生し、あるものは破棄することも可能です。)
では、その違いは。
-
squash
はソースブランチに触れません (tmp
ここでは)そして、あなたが望む場所に単一のコミットを作成します。 -
rebase
を使用すると 同じソースブランチに進む (なおtmp
)を使っています。- 新しいベース
- よりクリーンな歴史
関連
-
[解決済み] [email protected] へのいくつかの参考文献のプッシュに失敗しました。
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git でブランチからコミットを削除する
-
[解決済み] git rebase の取り消し
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] 既にリベースを開始している場合、2つのコミットを1つにマージするにはどうすればよいですか?
-
[解決済み] git merge` で `--no-ff` フラグはどのような効果がありますか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】gitがローカルバージョンをリモートバージョンに置き換える
-
[解決済み】Gitのエラー。リモートリポジトリへの接続時に「Host Key Verification Failed」。
-
[解決済み】ERROR: Error cloning remote repo 'origin'.
-
[解決済み】Githubの認証に失敗した - ... GitHubはシェルアクセスを提供しない
-
[解決済み] git: fatal: リモートリポジトリから読み取れませんでした。
-
[解決済み] git ls-remote と git ls-remote origin の違い。
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み】Git: ブランチ上のすべてのコミットを破棄する方法
-
[解決済み] docker-compose upとrunのどちらを使うべきですか?
-
[解決済み] gitのコミット範囲を戻す