1. ホーム
  2. git

git で複数の stash を結合する方法

2023-12-31 15:55:26

質問

これはブランチ上のパイプラインです frontend にあるパイプラインです。

| Stash@{3} はすべて Stash@{1} (2つの小さなコミットを除く)

| タイニーコミット

| タイニーコミット

| 2 週間前の巨大な一括コミット、現在はリベースして Stash@{1}

私の作業ツリーは現在クリーンです。

Stash@{1} は、2 週間前の一般的な開発コードの一括コミットからの内容です (これは最初の場所で隠しておくべきだったのです)。このコミットは元に戻され、stash に移動されました。

Stash@{3} がそのツリーでの最新の作業であるため Stash@{1} からの最新の作業です (コミットされたいくつかの変更を除きます)。

私はこの2つの隠し場所を作業ツリーにまとめて、この巨大な作業プールからいくつものコミットを行えるようにする必要があります。

私は git stash apply stash@{1} を実行した後、試してみました。

git stash apply stash@{3}

git stash show -p | git stash apply stash@{3}

が、どちらの場合も「dirty working tree」となってしまいます。どうすればこの作業をマージできるのでしょうか?なぜなら stash@{3} の方が新しいので、私はそれを stash@{1} を優先させたいのです。

どのように解決するのですか?

作業ツリー内の変更されたファイルと競合しない場合のみ、スタッシュを適用することができます。 git status に変更されたファイルがないことを確認し、もしあれば、それらをコミットします。その後、実行します。

git stash apply stash@{1}
git commit -a
# Enter your commit message
git stash apply stash@{3}

それから、新しいコミットを行うか、前のコミットを修正してそれらを結合します。適用するたびに、マージの衝突を解決する必要があるかもしれません。

また、もしあなたが git stash pop ではなく apply であることに注意してください。 stash@{3}stash@{2} になります。