42
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

git で一番危険なコマンドは init ?

Posted at

言いたいこと

⭕
$ git init hoge
$ cd hoge
❌
$ mkdir hoge
$ cd hoge
$ git init 

どんな方に見て欲しいか

  • 初心者に git を教えている方。
  • git status を実行したときに何十行も赤い文字が出た方。
    スクリーンショット 2022-04-06 11.37.13.png
  • ls -a ~ | grep .git を実行したときに .git が出力された方。
$ ls -a ~ | grep .git
.git  <- これ
.gitconfig
.gitignore-boilerplates
  • (ターミナル操作と git の初心者の方。)

背景

後輩に「この git 教材を最初から最後までやってみて💪」と伝えたら、多くの後輩がホームディレクトリで git init を実行していたということが後々発覚しました。これは危険な状態です。また、それを引き起こし得る git の慣習にも多少の原因があるのではないかと思い記事化することにしました。

.git の位置の重要性

(誤解を恐れずに言うと、)git は commit されていない変更やファイルをいらないモノだと思っています。(具体的には git status で赤い文字で表示される Untracked files などのこと。)なので、git はお掃除や巻き戻しのために Untracked files を全削除するコマンドがいくつか用意されています。

ホームディレクトリには卒論や思い出の写真などがあるかもしれません。しかし、git はいつでもそれらを不可逆に削除することができてしまいます。

正直、危険性があまり伝わってないかもしれないので、以下のような例を載せておきます。

  1. 間違えてホームディレクトリで git init してしまった。
  2. 適切なディレクトリ(以後 hoge )に移動して git init し直した。
  3. hoge で作業をする。(この状況が数ヶ月くらい続く。)
  4. hoge にいると思って、間違えてホームディレクトリで git の履歴を巻き戻すコマンドを実行する。
  5. PC の全データが不可逆に削除される。

修正手順

ネットで検索すると r m -rf .git(コピペ防止)すれば直るというコメントをよく見ますが、

  • やり直せない。
  • 残るのは作業ディレクトリのみなので、事前に別ブランチのファイルを復旧する必要があるかもしれない。
  • ターミナルの実行履歴に残したくない。

などの理由から私は以下の手順が良いと思っています。

  1. この記事を含め、ネットの情報の正確性を判断できる人を呼び出す。
  2. git branch でブランチが複数あるかを確認する。
  3. ブランチが複数ある場合:
    1. 作業ディレクトリに含まれていない差分が他のブランチに存在しないかを log, diff などで確認する。
    2. 無ければ次へ進む。存在していて、もし必要なものだったら mergecheckout などで作業ディレクトリに取り込む。
  4. .git.git-username など分かりやすい名前に変更する。(後でゴミ箱を漁るかもしれないため。)
  5. .git-username をゴミ箱に入れる。(rmは使わない。)

より良い git init の使い方

カレントディレクトリという概念を理解していないことが全ての原因であることが多いです。よく見られる以下の手順は、

$ mkdir hoge
$ cd hoge  # <- 超重要
$ git init 

カレントディレクトリの移動というとても重要なことをした上でリポジトリを作成します。ただ、ここで偶然見逃したりタイポしたりしてそのまま続けてしまうと、誤って上位ディレクトリをリポジトリ化させてしまうのです。

ここで私が提案したいのはこれです。

$ git init hoge
$ cd hoge

git init は引数を持つことができます。(正直、git を使い始めてから3年間このことを知りませんでした。)この引数に指定するディレクトリはまだ存在してなくてもいいし hoge/fuga のようにネストされたディレクトリでも OK です。これなら、必要な場所だけを安全にリポジトリ化できます。

何なら VSCode などのソフトを使って、ボタンをクリックしてリポジトリを作成するのもアリだと思います。

余談

git をやる前に

PC のデータは階層構造に配置されていて、Finder やエクスプローラなどのソフトと同じくターミナル操作する際も「今開いているフォルダ」に相当するカレントディレクトリという位置がある。といったような一定の座学を実際に手を動かす前にした方が良いと思います。これは10分で修了する人もいれば理解するまでに数日かかる人もいるかもしれません。

git は良いやつ

git はリポジトリ内しか管理できないので、適切なディレクトリをリポジトリ化することさえできれば、git がリポジトリの外にある無関係なファイルに影響を与えることはありません。なので、最初の壁さえ乗り越えられれば安心して git life を楽しめます。

プログラミングで一番大変なことはプログラミングを始めることですが、それ以降は「こんなモノ作ってみたい→できた」という楽しい世界があります。始める人は頑張って最初の壁を乗り越えてほしいし周りの経験者は壁の上から引っ張り上げてほしいな〜と思います。〜完〜

42
32
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?