gitコマンドのまとめ

個人的な話

こちらのブログを更新するのは、超久々です。笑

色々とありまして、業界完全未経験ですが、2018年10月から自社サービス系の企業様のもとで働くことになりました。 (このブログは、自分のメモを残しておくために使うことにしたので、一番最初の記事以外削除しました。)

一般的には(?)、未経験から自社サービス系の企業に転職するのは所謂「成功」なのですが、もし試用期間で切られたら恥ずかしいので(笑)、「どういう風に転職活動をしたか」みたいな講釈を垂れるつもりはまだありません。

(そういう話はtwitterのDMで承ります→ ヒロアキ@twitter

本題

今回は、タイトルにもあるように、gitコマンドを自分なりにまとめようと思います。   理由は、「入社前に復習しといて」と言われたのと、未だにググりながら使うことが多いからです。
一応、udemyで講座を修了したのですが、やはりアウトプットしないと覚えませんね(^^;)
という訳で以下にコマンドと、gitの注意点がつらつらと続きます。
完全に自分用のメモなので、qiitaの記事とか見た方が分かりやすいと思います。笑

git init  //空のgit repositoryが作成される

git remote add <remote name> <repository URL>  //<remote name>というショートカットで、URLのリモートリポジトリを登録する
git remote show <remote name>  //リモートリポジトリの確認 
git remote rename <old name> <new name>  //リモートリポジトリの名前を変更する

git push --delete <remote name> <branch name>  //リモートブランチを削除する
git remote rm <remote name>  //リモートリポジトリを削除する

git clone <repository URL>  //URLのリモートリポジトリのコピーを作成する

git add <change file>  //変更をステージに追加する

git commit -m "<message>"   //変更を記録する(メッセージを書く)
git commit -v  //変更を記録する(エディタで記録)

git status  //変更されたファイルを確認する  
git status -sb  //上記の簡易表示版  

git diff  //変更差分を確認する(git addする前のファイルのみ。)  
        //後ろにファイル名を付ければ、そのファイルのみの差分を確認できる)  
git diff --color-words  //変更差分を確認する(より細かい単位で)  
git diff --staged  //変更差分を確認する(git addした後のファイル)


git log --oneline  //一行で、変更履歴(コミットメッセージ)を確認する  
git log --graph  //ツリー状(?)にコミットログを表示する  
git log --stat  //変更ファイルの表示
git log <commit ID> -p <file>  //ファイルの変更履歴を確認する  
git log -n <number>  //表示する履歴数を指定する  
git log <remote>/<branch>  //remoteのbranchのコミットログを確認する

git rm <file>  //ファイルの削除を記録する
git rm --cached <file>  //リポジトリにあるもののみ削除(ワークツリーは削除されない)

git mv <file>  //ファイルの移動を記録する

git push <remote name> <branch name>  //ローカルリポジトリの内容をリモートリポジトリに送信する、ローカルブランチをリモートリポジトリのブランチとして追加する

git pull <remote name> <branch name>  //リモートリポジトリの内容をローカルリポジトリとワークツリーにコピーする

git checkout -- <file>  //ファイルの変更を取り消す。git addする前におこなう。  
git checkout <commitID> <file>  //特定のコミットまでファイルの状態を戻す。  

git clean -n  //Untracked filesを削除するのに使う。-nオプションは、ファイルの確認のみで実際には削除しない。  
git clean -f  //Untracked filesを削除する。ディレクトリも削除する場合は、-fdとする。  

git reset HEAD <file>  //git addしたファイルをステージから消す。ワークツリーになされた変更はそのまま。
git reset --soft HEAD^  //直前のコミットを取り消す
git reset --hard <commit ID>  //特定のコミットに戻す  

git commit --amend  //直前のコミットを修正する。  
           //viで編集します。
git commit --amend -m "<commit message>"  //上記と同じ意味

git rebase -i HEAD~数字  //2つ以上前のコミットメッセージを修正する時に使用。  
               //viが立ち上がるので、修正したいコメントのpickをeditに変更後、  
               //git commit --amendで修正 → git rebase --continue(複数修正する場合は、都度git rebase --continueする)  

git branch  //ブランチの表示
git branch <branch name>  //新しいブランチを作る

git branch -m <new branch name>  //自分が作業しているブランチの名前を変更する。
git branch -d <branch name>  //ブランチを削除する。

git checkout <branch name>  //ブランチの切り替え
git checkout -b <branch name>  //ブランチの新規作成と、そのブランチに切り替え

git fetch <remote name> <branch name>  //リモートリポジトリのbranch nameの内容をローカルリポジトリにコピーする

git merge <branch name>  //branch nameの内容を現在のブランチに合流させる
git merge <remote name>/<branch name>  //git fetchしてきたブランチを現在のブランチに合流させる

git rebase <branch name>  //現在のブランチの基点となるコミットをbranch nameに変更する  

git cherry-pick <commit ID>  //commit IDのコミット分の変更のみ現在のブランチに取り込む  

git tag  //タグの一覧を表示する
git tag -a -m "<message>"  //現在のブランチの最新のコミットに、署名などの情報付与型のタグの作成
git tag <tag name>  //現在のブランチの最新のコミットに、タグの作成
git tag <tag name> <commit name>  //コミットにタグを後付けする

git show <tag name>  //タグの詳細内容を表示

git push <branch name> <tag name>  //タグをリモートリポジトリに送信する
git push <branch name> --tags  //全てのタグを送信する

git stash  //現在、変更しているファイルを一時的にステージ・ワークツリー上から避難させる
git stash save <message>  //コメント付きで避難させる
git stash -u  //追跡していないファイルも避難させる  
git stash list  //避難した作業を確認する

git stash apply <stash name>  //避難させた作業を復元する。EX-git stash apply stash@{0}

git stash drop <stash name>  //避難させた作業を削除する
git stash clear  //全作業を削除する

git revert <commit ID>  //git pushした後のコミットを打ち消すコミットの生成。これの後にpushし直す。  
git revert -n <commit ID>  //コミットを伴わないgit revert(通常ではgit revertした直後にコミットが生成される。注意点として、この後コミットするファイル群が打ち消される。コミットしないのはそのままリポジトリに残る)

※注意点
・git pullは基本的に使わない。
 →取得するリモートリポジトリのブランチがローカルリポジトリの異なるブランチを上書きしてしまう場合がある。

・コンフリクトしたらファイルの中身を書き換えるか、「>>>」「===」「<<<」を消去する。
 →git add
 →git commitで解決

・そもそもコンフリクトが起きないようにするには、、、
 →複数人で同じファイルを編集しない。
 →pull , mergeの前にcommit , stashをしておく。
 →pullする時は必ずgit branchする

・git pushしたコミットをgit rebaseしない
 →やってしまうと、push出来なくなる
 →pushする前はrebaseを使い、した後はmergeするとコンフリクトを防ぎ易い

・基本的な開発手順
 ・git cloneをする
 →branchを確認する(git branch)
 →開発用に新しいbranchを切って、移動する(git checkout -b branch name
 →不安だったら移動先のbranchにいるか確認(git branch)
 →リモートリポジトリにbranchを追加(git push remote name branch name
 →その状態のままコードを書く
 →addしてcommitする(git add, git commit)
 →自分の担当部分が終わったらpushする(git push remote name branch name
 →Pull Requestを出す
 →mergeされたのを確認したら初めのbranchに戻る(git checkout branch name
 →localでいままで作業していたbranchを削除する(git branch -d branch name
 →他の人の開発分を取り込む
(git fetch remote name branch name, git merge remote name/branch name

・以前のコミットに戻るやり方

 $ git log --oneline //戻りたい位置のコミットIDの探査
 $ git show <commit ID> //コミットIDの確認
 $ git reset --hard <commit ID> //指定したコミットIDまでバックする

エイリアス

che = checkout
bra = branch
sta = status
glog = log --graph
log5 = log -n5 --oneline --graph
log10 = log -n10 --oneline --graph
cb="git rev-parse --abbrev-ref HEAD"

cb="git rev-parse --abbrev-ref HEAD"の詳細は 退屈なgit commitの定型文はGitフックにやらせよう - Qiitaを参照してください