1952

保存しようとしているスタッシュから現在変更されている他のファイルを残して、特定のファイルをスタッシュするにはどうすればよいですか?

たとえば、git statusでこれが得られた場合:

younker % gst      
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/controllers/cart_controller.php
#   modified:   app/views/cart/welcome.thtml
#
no changes added to commit (use "git add" and/or "git commit -a")

app / views / cart / welcome.thtmlだけを隠したいのですが、どうすればよいですか?次のようなものです(ただし、もちろんこれは機能しません):

git stash save welcome_cart app/views/cart/welcome.thtml
4

8 に答える 8

2855

編集: git 2.13 以降、特定のパスを stash: に保存するコマンドがありますgit stash push <path>。例えば:

git stash push -m welcome_cart app/views/cart/welcome.thtml

古い答え:

git stash --patch(または)を使用してそれを行うことができgit stash -pます。変更された各ハンクが表示される対話モードに入ります。スタッシュしたくないファイルに遭遇したときに、スタッシュnしたくないファイルをスキップし、終了して残りのハンクをスタッシュしないままにするために使用 します。表示されたハンクと残りのハンクをそのファイルに隠します。yqa

最もユーザーフレンドリーなアプローチではありませんが、本当に必要な場合は作業を完了できます.

于 2011-03-31T21:19:11.700 に答える
359

私は通常、スタッシュしたくないインデックスの変更を追加してから、オプションでスタッシュし--keep-indexます。

git add app/controllers/cart_controller.php
git stash --keep-index
git reset

最後のステップはオプションですが、通常は必要です。インデックスから変更を削除します。


警告 コメントに記載されているように、git stash --keep-indexステージングされているものとステージングされていないものの両方を stash にプッシュします。--keep-indexスタッシュが完了した後、インデックスをそのままにしておきます。これにより、後でスタッシュをポップするときにマージの競合が発生する可能性があります。

于 2012-12-18T20:40:06.420 に答える
2

GIT GUI クライアントの使用に問題がなければ、 2020 年 5 月の時点でForkはこれをかなりシームレスに行うことができます。git-fork の部分的な stash 機能の GIF

Fork (Google には難しい名前です!) は無料のソフトウェアではなく、評価期間後には 50 ドルかかりますが、WinRAR や WinZip の場合と同様に、ポップアップを無視することができます。

于 2021-04-23T00:41:31.780 に答える