GitHub|操作ミスをした場合の対応
GitHub に上げてはいけないものを commit/push したとき
パスワード等、GitHubに上げてはいけないものを上げてしまった時、
commit履歴を削除する必要があります。
GitHubに pushしていない場合
直前の commit の取り消し手順
以下のコマンドを実行します。これで「直前の add/commitを取り消す」ことができます。
git reset HEAD^
これで完了です。直前のadd/commitを取り消せました!
詳しく解説
githubから余計な変更を削除したい時は
・ファイル変更はしない
・git reset --mixed
(add/commit を取り消す)を実行する
という手順で対応します。
参照:git reset について
working tree ... 現状のファイルのコード
index ... addしたもの
HEAD ... 今いるブランチの最新のcommit
オプションによって以下のような違いがあります。
git reset --mixed
working tree:ファイル変更はそのまま
index & HEAD:取り消す
git reset --soft
working tree:ファイル変更はそのまま
index:そのまま
HEAD:取り消す
git reset --hard
working tree:ファイル変更を取り消す
index & HEAD:取り消す
git reset HEAD^
working tree:ファイル変更はそのまま
index & HEAD:直前の add/commitを取り消す
--mixed がデフォルトなので、実際には git reset --mized HEAD^ が実行される
git reset commit_id
特定のコミットまでresetする(commit_idは、git log
で確認できる)
--mixed がデフォルトなので、実際には git reset --mized commit_id が実行される
GitHubに pushした場合
以下、GitHub に上げてはいけないものを push した場合の対応です。
まずは「pushしていない場合」と同様に commit を取り消します。
$ git reset --mixed
次に、以下コマンドを実行し、強制的にpushを上書きします。
$ git push -f origin ブランチ名
以上で、pushの取り消しが完了しました!
余計なものを commit したとき
GitHubに上げてはいけないわけではないが、余計なものを commitしてしまった時の対応です。
対応1か2のどちらかを使いましょう。
対応1 過去のcommitを打ち消す
以下コマンドを実行して、過去のcommitを打ち消します。
$ git revert
git revert
は、過去のcommitを打ち消す内容の、新しいcommitを作成できます。
過去のcommitは打ち消されますが、commit履歴は残るので、注意が必要です。
対応2 gitの管理対象から外して削除する
以下のいずれかコマンドを実行して、
該当ファイル/ディレクトリをgitの管理対象から外し、削除することができます。
$ git rm ファイル名
$ git rm -r ディレクトリ名
git rm
は、選択したファイル/ディレクトリをgitの管理対象からはずし、削除することができます。ただ、再度git add
を実行するとまた管理対象になってしまいます。それを避けるため、git rm
を実行した後、該当ファイル/ディレクトリを .gitignore に追加しましょう。
また、git rm
はファイル/ディレクトリの削除まで行います。削除までしたくない場合は、git rm --chached
を実行します。
main ブランチで編集した時
以下、トピックブランチではなく、mainブランチで作業をしてしまった場合の対応です。
commitをしてしまった場合は、git reset
を実行します。
※この時、ファイルの編集はそのまま残しておきたいので、git reset --soft
か git reset
のどちらかを実行するようにします。(単に git reset を実行すると、デフォルトの git reset --mixed が実行されます。)
commitしていない状態に戻しました。次に、以下のコマンドを実行し、変更を一時退避します。
$ git stash
git stash
は working treeとindexを一時退避します。
次に、適切なブランチに移動し、以下のコマンドを実行し、変更を適用します。
$ git stach apply stash@{n}
※変更を適用する前に以下のコマンドを実行し、現在いるブランチに適用したい対比された変更を確認できます。
$ git stash list
Discussion