はじめに
皆さんが普段から使っているリポジトリ管理ツールのgit。
とても便利なツールですが、実は超危険なコマンド
があるそうです。
そこで今回は、gitの危険な操作について徹底調査しました!
危険な操作① push
みなさんが絶対に使っているgit push
ですが、使い方を誤るととても危険です!
pushはローカルの内容をリモートに反映させるコマンドです。
ローカルで誤った内容をコミットしたままpushしてしまうと、リモートへ間違った内容を反映されてしまうこととなり取り返しがつかなくなります。。。
ローカルとリモートの関係について詳しくはこちらの記事を見てください!
Push自体は気軽に行うことが多いと思いますが、Pushしてリモートに一度反映させた内容は基本的に取り消すことができなくなります。
そのため、Pushするときはローカルから反映させる内容に誤りがないかを十分に確認して慎重に行う必要があります。
危険な操作② reset
git reset
は指定したコミットハッシュまで変更差分を戻してしまいます。
--hard
オプションをつけるとやっていた作業が全部消えてしまうことも・・・
うっかり実行して作業が全部消えてしまったら怖いですよね・・・
デフォルトオプションでは--mixed
が選択されているのでgit reset
をオプションなしで実行しても勝手に消えたりはしないです。
ただ、理解して実行しないと自分の修正差分が消える可能性は普通にあるので、gitの操作中にreset
するときは十分に注意する必要があります。
(コミットの戻し方みたいな記事で気軽にreset --hard
してることが多いので危険だなと思っています。)
危険な操作③ rebase
一番危険な操作です!
「間違ってコミットしちゃったやつを消したい!」「マージしたらぐちゃぐちゃでよくわかんないから奇麗にしたい」そんな要望をかなえてくれるのがrebase
という素敵なコマンドです。
でもちょっと待って!rebase
はブランチ同士を無理やりくっつける歴史改変のコマンドだったのです!
歴史改変をして無理やり今がきれいに見えるようにしているので過去の修正がごっそり全部なくなったり修正したはずのコードが元に戻ったりと、正しく行えないと先祖がえりを起こしやすいとても危険なコマンドみたいです!
gitの基本概念として、作業した記録は残していくことが基本となっています。
間違ったコミットなどはrebase
で隠そうとせず間違ったことも記録したほうがいいと私は考えています。revert
などでコミットの打消しなども用意されているのでgitとしても隠すことは是としていないと思っています。
先祖返りの原因No1はよくわからずにrebase
したブランチをpush
していることだと思っているのでrebase
は完全に理解するまで使わないことを強く推奨します。
危険な操作④ rm
git rm
を使用するとリポジトリ内のファイルを削除してしまう可能性があります!
消したファイルは元に戻らないので慎重に捜査をしないと取り返しのつかないことに((+_+))
bashコマンドのrmと同じ感じなので使うときは普通に気を付けて削除する。
危険な操作⑤ stash
stash
は変更差分をコミットせずに保存できる便利なコマンドです!
差分を取っておくだけだから危険度がなさそうに見えますが、大きな危険が潜んでいます・・・
stash
はあくまで一時保存なのでgitが差分を保持している保証がないのです!
stashしすぎると自分がどの差分をstashしたかわからなくなったり間違った内容を適用してしまったりとstash
を多用するリスクがたくさんあります。
rebase
のところでも説明しましたが、gitは変更差分を記録していくことが前提になっているので面倒くさがらずにcommit
していく癖をつけるといいですね!
便利なコマンドなので私も良く使っていますが、gitは基本commitして記録していくものなのでstashの多用は危険です。
stashは修正内容を一時保存するものなので、意図しない修正を取り込むこととなったりstashしておいたものがどれかわからなくなったりすることがあるので適度に使うのがおすすめです。
stash
はパスワードなどのコミットしたくない情報を一時保存したりする用途で私はよく使っています。
おわりに
いかがでしたか?
gitの危険な操作
について、詳しくご紹介できたのではないでしょうか?
便利なgitにも危険が潜んでいて、注意して使わなければいけないのでしょう。
gitの危険についてははっきりとした情報はありません
が、今後も危険なコマンドが出てくるかもしれませんね。
この記事が参考になったよ~面白かったよ~って思った方はチャンネル登録と高評価をお願いします!