・2017/03/22
Gitでリモートにプッシュした内容を完全に無かった事にする方法
(いわゆる Gitでやらかした時に使える最強奥義 git reset --hard HEAD~; git push -f)
Tags: [Raspberry Pi], [電子工作]
● Gitでやらかした場合に使うと便利なコマンド
Gitの履歴管理の観点で「完全に無かった事にするのはケシカラン!revertを使え!」と言う意見がありますが、操作時の単純ミス等で意図しないコミットをした場合はそれは「単なるゴミ」でしか無い訳で、本当に無かった事にしたい場合が有ります。
● Gitでリモートに間違ってプッシュしちゃったのを取り消したい
リモートにプッシュする時は細心の注意で気を付けて確認をしていますが、どうしてもミスが発生する場合が有ります。
・Gitでリモートに不要なファイルを間違ってプッシュしちゃったのを取り消したい
・Gitでリモートに必要なファイルを含めないでプッシュしちゃったのを取り消したい
・Gitでプッシュのコメントが不適切だったのを取り消したい(コメントの内容を訂正して入力しなおしたい)
・リモートリポジトリに行なったコミットを完全に削除して無かった事にしたい(証拠隠滅)
色々な理由が有ると思いますが、そんな願いを叶えてくれるコマンドは簡単です。
該当のブランチに移動した状態でターミナルを開いて、下記のコマンドを実行します。
git reset --hard HEAD~; git push -f
ユーザー認証のアカウント情報を聞いてきたら入力します。
リモートにコミットした内容を”完全に無かった事”にしてくれます。
※ --hard指定なのでローカル(ワークディレクトリ)の内容も無かった事になります。
ローカルのワークディレクトリの内容(パソコンの HDDの内容)を保持したい場合は --softを指定します。
git reset --soft HEAD~; git push -f
gitリモートの内容だけが「無かった事」になります。
繰り返し操作する事で、どんどんさかのぼって「無かった事」にできます。
● Gitでプッシュする時に Git 1.x系の場合、src:dstを省略した時の動作には要注意
Git 1.x系の場合、<src>:<dst>を省略した時の Pushの挙動は matchingと言う挙動がデフォルトになっており、意図しないブランチまで巻き添えを食ってしまう事が有ります。
Git 2.x系は simpleと言う挙動がデフォルトになっており、有る程度は安全です。
Git 1.x系を使用している場合は
git config --global push.default simple
をして、Git 2.x系と同じ simpleの挙動をデフォルトに設定する事でリスクを回避できます。
※ デフォルトの挙動が simpleで有っても src:dstを省略せずに明示的に指定して pushするのが実際には正しい作法と言えると思います。
● SourceTree - Gitで開発する時に、このアプリが無いと開発ができないくらいに便利
SourceTree Gitクライアントアプリ(ただし最近のバージョンは無駄に UIに凝っており馬鹿になっています。マテリアルデザインになってから馬鹿になりました。)
SourceTree - Windows と Mac 対応 Git & Mercurial 無料クライアント
Mac および Windows 向けの視覚的な Git & Hg 無料クライアント
Tags: [Raspberry Pi], [電子工作]
[HOME]
|
[BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c)
2017 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator
http://www.neko.ne.jp/~freewing/software/git_howto_rollback_commit_already_pushed/