[解決済み] Git で直近のローカルコミットを取り消すには?
質問
うっかり 間違ったファイルをコミットしてしまった から Git が、まだサーバーにコミットをプッシュしていませんでした。
どうすれば ローカルリポジトリからこれらのコミットを取り消す ?
唯一の方法は、何らかのGUIテキストエディタで編集をコピーし、ローカルクローン全体を消去し、リポジトリを再クローンし、編集を再適用することだと思われます。しかし
- この場合、データ消失の可能性があります。
-
のみではとても無理です。
git commit
が実行されました。
もっと良い方法はないのでしょうか?
どのように解決するのですか?
コミットの取り消し&やり直し
$ git commit -m "Something terribly misguided" # (0: Your Accident)
$ git reset HEAD~ # (1)
[ edit files as necessary ] # (2)
$ git add . # (3)
$ git commit -c ORIG_HEAD # (4)
-
このコマンドは アンドゥ . 最後のコミットを取り消しながら 作業ツリー(ディスク上のファイルの状態)はそのままにしておきます。 再度コミットする前に、再度追加する必要があります)。
-
ワーキングツリーファイルの修正を行う。
-
git add
新しいコミットに含めたいもの。 -
変更をコミットし、古いコミットメッセージを再利用します。
reset
は古いヘッドをコピーして.git/ORIG_HEAD
;commit
と-c ORIG_HEAD
を実行すると、古いコミットのログメッセージを含むエディターが開き、それを編集することができます。メッセージを編集する必要がない場合は-C
オプションを使用します。
また、直前のコミット(あるいはそのコミットメッセージ)を編集することもできます。
,
commit --amend
は、現在のインデックス内の変更を直前のコミットに追加します。
サーバーにプッシュされたコミットを削除する(元に戻すのではない)には
を使用すると、履歴を書き換えることができます。
git push origin master --force
が必要です。
その他の情報
HEADを前の場所に戻すにはどうしたらいいですか?(detached head) & コミットを元に戻す
上記の回答では
git reflog
を使用すると、元に戻したいコミットの SHA-1 を特定することができます。この値がわかったら、上で説明したような一連のコマンドを使用します。
HEAD~
と同じです。
HEAD~1
. 記事
gitのHEADとは何ですか?
は、複数のコミットをアンコミットしたい場合に便利です。
関連
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git で、ステージされていない変更を破棄するにはどうしたらいいですか?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] git rebase の取り消し
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルの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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [email protected] へのいくつかの参考文献のプッシュに失敗しました。
-
[解決済み] git rebase fatal: 必要なリビジョンは1つです。
-
[解決済み】git push >> fatal: 設定されたプッシュ先がありません。
-
[解決済み] git: fatal: リモートリポジトリから読み取れませんでした。
-
[解決済み] git initを2回実行すると、リポジトリが初期化されますか?それとも既存のリポジトリを再初期化しますか?
-
[解決済み] Gitのプッシュエラーです。Unable to unlink old (Permission denied)です。
-
[解決済み】gitで最後のコミットを取り消す方法 [重複]。
-
[解決済み] 最後のgitコミットを非ステージ化領域に移動(または「Undo」)する [重複] 。
-
[解決済み] 最後のコミットを取り消す方法 [重複]。
-
[解決済み] Gitへの最後のプッシュをロールバックする方法はありますか?[重複]。