🤖

GitHub|操作ミスをした場合の対応

2023/08/15に公開

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 --softgit reset のどちらかを実行するようにします。(単に git reset を実行すると、デフォルトの git reset --mixed が実行されます。)

commitしていない状態に戻しました。次に、以下のコマンドを実行し、変更を一時退避します。

$ git stash

git stashは working treeとindexを一時退避します。

次に、適切なブランチに移動し、以下のコマンドを実行し、変更を適用します。

$ git stach apply stash@{n}

※変更を適用する前に以下のコマンドを実行し、現在いるブランチに適用したい対比された変更を確認できます。

$ git stash list

Discussion