Bash
Git

Bashで"たまに" or "よく"お世話になるコマンド

はじめに

  • この記事はあくまで自分用のチートシートです.
  • 記事を読んでくださってありがたいですが,記事を読んでもわからないことがあればご自身で別途調べることをおすすめします.

わからないことがあれば自分で調べることも大切だと思います.

  • 結構即興で書いてるところが多いと思うので間違いも多いと思います.(自分用のチートシートなので構わない)
  • 間違いに対してアドバイス,コメントはどんどん書いてもらって大丈夫です.むしろ嬉しい,助かります(*^^*)
  • チートシートなのでちょこちょこ更新があると思います.

あるファイルを連番でコピーしたい

Terminal
> seq [連番の初期値] [連番の終了値] | xargs -i cp [コピー元ファイル名] [コピーしたいファイル名]{}.[拡張子] 

cpコマンドは最後の引数がDESTになるから,ただのブレース展開だと最後の展開がDEST扱いとなりうまく実行されない.

Terminal(失敗例)
cp [コピー元ファイル名] [コピーしたいファイル名]{1..9}.[拡張子] 

上記の場合[コピーしたいファイル名]9.[拡張子]がDEST扱いとなりNG.
たぶん[コピーしたいファイル名]9.[拡張子]がディレクトリじゃねーよとBashに怒られる.

Git系

リポジトリ構築

Terminal
> git init

これが無いと始まらない.

ステージング

ステージングエリアにレッツゴー!

Terminal
> git add <追跡したいファイル名>

git add *とかでよく一括してステージングエリアにファイルを登録しちゃう.(Modifyだけならgit add -uが断然マシ)
悪い癖だけど便利なんだよね……
たまにステージングエリアぶっ壊れるけど

ステージングエリアからゴーバック! (アンステージング)

Terminal
> git reset [tree-ish] <対象ファイル名>

tree-ishについて知りたいならman git叩いて/tree-ishで検索しろ!
それでわかる!

コミット

コミットやり直したいんだけど?

Terminal
> git commit --amend -a

-C HEADのオプション追加でHEADへのコミットに使用したコミットメッセージをそのまま流用できる.
小文字-cでは,流用するコミットメッセージが入力された状態でエディタが起動する.

コミット取り消したいんだけど?

これにはいくつか方法がある.

  • 以前のコミットを残して,そのコミットを打ち消すためのコミットを新たに追加する方法. ・・・ (1)
  • 以前のコミットを無かったことにする方法. ・・・ (2)

説明が少し長くなるため,要点だけ知りたいならコマンドだけ見ればよろしい.

(1)は過去のコミットに間違いが存在し,これを取り消したことを含めてGitに記録しておきたい時に活躍する.
(2)は過去のコミットに間違いが存在したが,これを無かったこととして扱う際に活躍する.

例えると……
(1)は,直前のコミットから出現したバグを早急に修正したが,念の為バグを含んだ事実もGitの歴史に残しておきたい時に活用.
(2)は至って単純.バグなんて知らないよ?って感じでGitに記録する.

余程のことがない限りは(1)の方を用いる.
何故かって? そりゃーバグの原因を未来の自分が閲覧できるから.(GitはVCS, 歴史を刻むもの)
恥ずかしい! 黒歴史バイバイって場合は(2)をどうぞ.

少し長くなったが主役のコマンドだ.

Terminal(1の方法)
> git revert <HEADなどのtree-ish>
Terminal(2の方法)
> git reset [--hard | --soft] <戻したいコミットまで>

revertはコミットを順々に遡ること.
コンフリクトを生じる原因となり得るため.

resetは少し注意が必要.

  • --hardオプションは,Gitのワーキングツリー,ステージングエリアとHEADの位置を含める3つ全てを指定のコミットまで移動する. 故に,直前の編集した内容を含め全てが闇に葬られる.
  • --softオプションは,HEADの位置のみを指定のコミットまで移動する.故に,直前のステージングエリアまでが残る.
  • オプション無し(--mixed)は,HEADの位置とステージングエリアを指定するコミットまで移動する.故に,ステージングエリアの状態は闇に葬られるが,編集内容は崖に捕まっている状態だ.

詳しく知りたくばここが役に立つだろう.

Gitにとってコミットは生命線,これを修正するとなるとどうしても説明が長くなりがちになる.
仕方ないじゃん? だって下手すりゃリポジトリ死ぬんだから!!!

けどGitの生命線手術ができるようになってくると玄人感出てくるから面白い.(ブランチ,タグ操作も玄人感満載で好き)

変更一言

20180215: Gitだけで記事一つ書けそう…