[解決済み] gitでステージングされていない変更点の一部を元に戻す
2022-04-23 16:37:43
質問
git でステージされていない変更の一部を元に戻し、残りはステージされていない状態のままにしておくにはどうすればよいのでしょうか? 私が考えた方法は
git commit --interactive
# Choose the parts I want to delete
# Commit the changes
git stash
git rebase -i master # (I am an ancestor of master)
# Delete the line of the most recent commit
git stash apply
これは動作しますが、次のようなものがあるといいですね。
git commit --interactive
は、変更の取り消しにのみ使用されます。 何か良い方法があれば教えてください。
解決方法は?
を使用することができます。
git checkout -p
これを使うと、作業コピーとインデックスの差分から個々のハンクを選んで元に戻すことができます。同様に
git add -p
では、インデックスに追加するハンクを選択することができ
git reset -p
は、インデックスとHEADの差分から個々のハンクを選んで、インデックスから後退させることができます。
$ git checkout -p file/to/partially/revert
# or ...
$ git checkout -p .
もし、これらの変更を元に戻す前に、あらかじめgitリポジトリをスナップショットして保存しておきたいのであれば、私はそうしたいです。
$ git stash; git stash apply
よく使うなら、エイリアスをつけるといいかもしれませんね。
[alias]
checkpoint = !git stash; git stash apply
優れたエディタモードやプラグインを使用すれば、個々のハンクや行の復帰はさらに簡単です。
-p
は、ちょっと使い勝手が悪いこともあります。私が使っているのは
Magit
Emacsのモードで、Gitを使うのにとても便利なんです。Magitでは
magit-status
で、戻したい変更の diff を見つけ、戻したい行を選択し (一度に一行ではなく塊ごとに戻したい場合は、戻したい塊にカーソルを置くだけでよいです)、次に
k
をクリックすると、特定の行を元に戻すことができます。Emacsを使うなら、Magitを強くお勧めします。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み】"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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「オリジン/マスターへのプッシュが拒否されました」というエラーが常に発生するのはなぜですか?
-
[解決済み】GitHubで空のブランチを作成する
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push some refs to .......
-
gitアップロードの共通エラー処理
-
[解決済み] 無効なVCSルートマッピング - 私のプロジェクトで3つのエラーが発生しました。
-
[解決済み] TortoiseGitで「git did not exit cleanly (exit code 128)」というエラーを解決するには?[クローズド]
-
[解決済み] Git pull - マージする前に移動または削除してください。
-
[解決済み] VSTS Git Fetch Failed with exit code: 128
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] GitのFETCH_HEADとはどういう意味ですか?