Gitの基本コマンドの使い方について
gitの基本コマンドについてまとめました。
gitの基本コマンド
ステージに追加する git add
git add フォルダ名
git add -A
git add .
のコマンドを実行すると、ステージングエリアに追加することができます。
ステージングエリアというのは、コミットされる前の場所のようなもので、コミットの前の段階をプリセットすることができます。
実際には、このステージングエリアでコミットするファイルを選択します。
すべてのファイルへのtrackingがアクティブになります。
-Aはall filesのことです。
git add .
でも同じ意味になります。
個別のファイルを指定したい場合は、たとえば、
git add index.html
とすればOKです。
VS codeではAという文字が表示されます。activeのAです。
ファイルを修正すると、Mという文字が表示されます。 modifiedのMです。
現在変更状況を確認する git status
git status
現在のワークツリーのファイルと前回のステージのスナップショットとの差の変更、現在のステージと前回のリポジトリ内にあるスナップショットの差の変更の両方を確認することができます。
VS codeではUという文字が表示されます。untracked filesのUです。
変更差分を確認する git diff
git diff ファイル名
とすると、ファイルの変更とステージとの差分を確認できます。diffはdifference(差分)の略です。
ステージに上げたあと、最新のコミットとの差を確認する場合、
git diff HEAD
とすると、前回コミットからの差分を確認できます。
ステージングエリアとHEADとの差分
git diff --staged
変更履歴を確認する git log
編集して、コミットした後にリセットしたくなったとします。
まずは
git log
で履歴を確認できます。
そしてcommit の後にidが表示されます。
戻りたいcommitのidをコピーします。
git log --oneline
とすると一行で表示されます。
git log -p index.js
とすると、指定したファイルの変更した差分を表示することができます。
git log -n 4
とすると、変更履歴の最新の4つまでが表示されます。
git log --oneline -n 5
と組み合わせることもでき、一行で変更履歴の最新の5つまでが表示されます。
そして、quitのqと入力して解除します。(ctrl Cではなくqです。)
反応しない場合は:qと入力します。
ファイルの削除を記録する git rm
ファイルをエディターから削除しただけでは、Gitの管理から外すことができません。
git rm ファイル名
とすると、コミットしたファイルをGitの管理から削除することができます。
git rm -r ディレクトリ名
とすると、コミットしたディレクトリも合わせてGitの管理から削除することができます。
リポジトリのデータだけ消してワークツリーには残したい場合、次のようにします。
git rm --cashed ファイル名
そして、.gitignoreにそのファイル名を追記しておきます。
ファイルの移動を記録する git mv
git mv 旧ファイル 新ファイル
これは下の3コマンドと同じ意味です。
mv 旧ファイル 新ファイル
git rm 旧ファイル
git add新ファイル
コミットする git commit
git commit -m 'メッセージ'
のようにメッセージをつけて実行すると、コミットできます。
-mはmessageのmです。メッセージ部分ののInitial commit部分は自由に設定することができます。
どの作業を何のために変更したのか、バージョン管理のためにすぐに振り返られるようにメッセージを残します。
-vでGitのエディターを立ち上げることができます。また、どのような変更をしたのかを確認することもできます。
コミットやステージに追加する前にどのファイルが変更されたか確認する癖をつけておきましょう。変更途中のファイルを追加してしまうことを防ぐためです。変更が完了したものだけを追加しましょう。
わかりやすいコミットメッセージの特徴
ほかのメンバーに「なにをなぜ変更したのか」がわかるメッセージをつけることです。
1行目:変更内容のようやく
2行目:空行
3行目:変更理由
git commit -v
とすると、何を変更したのかを確認することができます。gi
そして、1行目などに追記することができます。
リモートリポジトリに追加する git remote add
ローカルリポジトリからリモートリポジトリにプッシュします。
プッシュするには、まずはリモートリポジトリの場所を知る必要があります。
リモートリポジトリというのは、GitHubのことだと思ってください。
GitHubにてリポジトリを作成します。
GitHubでリポジトリを作成したら、
…or push an existing repository from the command line
という項目の次のものをコピーします。
git remote add origin https://github.com/....git
originという変数にGitHubのurlを格納して、今後アップしたり取得したりできるようになります。gitではメインのリモートリポジトリにoriginという名前をつけます。
このコマンドをターミナルで実行します。
そうすると、originというブランチをきることができます。そのとなりのhttps://github.com/….gitというURLがリモートブランチのURLとなります。これでローカルデポジトリが、リモートデポジトリの場所にアクセスできるようになります。
これで、コードをリモートブランチにpushすることができます。
originという部分は名前なので、自由に変更することができますが、originがスタンダードな名前です。
プッシュする git push origin master
ローカルリポジトリの内容をリモートリポジトリに送ることをpushといいます。他の人に共有したいとき、GitHubに残しておきたいという場合に使います。
git push origin master
とするとローカルリポジトリの内容をリモートリポジトリへ送信することができます。つまり、GitHubへ送ることができます。
上のコマンドは、originというリモートリポジトリをmasterというブランチへ送信するという意味です。
git push origin new-feature
とブランチ名を記入すると、ブランチをリモートリポジトリへ送信することができます。
git push -u origin master
-uをつけることで次回以降git push でmasterブランチからorigin リモートリポジトリへ送信することができるようになります。
変更を元に戻すやり方
ワークツリーのファイルを元の状態に戻す git checkout
git checkout --ファイル名
git checkout --ディレクトリ名
全ての変更取り消す git checkout –.
git checkout --.
–は、ブランチ名とファイル名が同じときにgitが正しく動作するようにするためです。
これは、ステージ情報をワークツリーに上書きすることで変更を取り消しています。
ステージに追加した変更を元に戻す git reset HEAD
git reset HEAD ファイル名
git reset HEAD ディレクトリ名
全ての変更を取り消す
git reset HEAD .
指定した変更はステージから取り消されます。ただし、ワークツリーのファイルには影響しません。HEADは最新のコミット意味します。
git reset HEADコマンドは、ローカルリポジトリの最新ファイルをステージに上書きすることで取り消ししています。ワークツリーのファイルも取り消したい場合は、上git reset HEADコマンドの後でgit checkout コマンドを使います。
直前のコミットを修正する(push前) git commit –amend
コミット自体を修正したい場合や、コミットのメッセージを修正したい場合(push前)
git commit --amend
今のステージの内容で上書きすることで修正します。–amendを使っていいのは、リモートリポジトリにpushする前のときだけです。
直前のコミットを修正する(push後) git commit
リモートリポジトリにpushしたコミットはやり直してはいけません。なぜなら他の人がリモートリポジトリからデータを取り込んでいた場合、その人のデータはリモートリポジトリの状態と異なるものになってしまいます。その結果、他の人がリモートリポジトリに保存しようとするときに、リポジトリが異なるというエラーがでます。
すでにpushしているコミットを修正したい場合は、git commit–amendコマンドではなく、git commitコマンドでもう一度新しいコミットを作成して、その内容を修正します。
コミットする前に、前のコミットの段階に戻す git reset –hard HEAD
編集した後、コミットする前にリセットしたくなったとします。
その場合、
git reset --hard HEAD
でリセットできます。前のコミットの段階に戻る一番簡単な方法です。
コミットした後にリセットしたくなったとき git reset –hard id名
変更履歴を確認した後、
git reset --hard id名
とするとリセットできます。
ただし、このように履歴を戻るのはマスターブランチに影響を与える危険があります。そのため、ブランチをきります。
ブランチをきることで、マスターブランチに影響を与えることなく変更することができます。
リモート情報を確認する git remote
リモートリポジトリ名を表示するコマンド
git remote
リモートリポジトリを複数持っていても全て表示されます。
対応するurlを表示する git remote -v
git remote -v
設定しているリモートリポジトリの情報を表示します。
リモートリポジトリを追加する git remote add
リモートリポジトリ複数登録することが可能です。
チーム開発用、個人開発用などとわけることができます。
git remote add リモート名 リモートurl
リモート名というショートカットでurlをリモートリポジトリとして登録するというコマンドです。
リモートリポジトリから取得する方法はフェッチとプルの2つあります。
リモートリポジトリから取得する(フェッチ) git fetch
git fetch リモート名
git fetch origin
リモートリポジトリからローカルリポジトリにデータ持ってくることができます。
remotes/リモート名/ブランチ
というローカルリポジトリの中のリモートリポジトリ専用の場所に保管されます。ワークツリーには反映されません。
ワークツリーに反映させるには
git merge origin/master
というコマンドを使います。originリポジトリのmasterブランチの内容を統合するという意味になります。
またブランチを確認するには
git branch -a
とします。
また
git checkout remotes/origin/master
などとすると、remotes/origin/masterへワークツリーの内容を切り替えることができます。
リモートリポジトリから取得してマージする(プル) git pull
プルは、リモートリポジトリから情報をフェッチして、ワークツリーへマージの両方を行うコマンドです。
git pull リモート名 ブランチ名
git pull origin master
またこちらは
git pull
と省略可能です。これは下記コマンドと同じです。
git fetch origin master
git merge origin/master
フェッチとプルを使い分け
基本はフェッチを使いましょう。
プルは楽ですが、統合したくないファイルに統合してしまう可能性があります。
たとえば自分がmasterブランチにいて何も変更していないようなら、プルを使うなど、慣れるまではフェッチを基本として、徐々にプルを使っていきましょう。
リモートリポジトリの情報を詳しく確認する方法 git remote show
git remote show リモート名
git remote show origin
git remote コマンドより詳しいじょうほうえを得ることができます。表示される内容は、
- フェッチとプッシュのurl
- リモートブランチ
- git pull の挙動
- git push の挙動
を確認することができます。
リモート名を変更する git remote rename
git remote rename 旧リモート名 新リモート名
git remote rename feature features
リモートが不要になり削除する git remote rm
git remote rm リモート名
gitのコマンド一覧
gitのコマンドは、GitHubのまとめたチートシートがとてもわかりやすいです。
https://training.github.com/downloads/ja/github-git-cheat-sheet.pdf
READMEの作成
touch README.mdでREADMEを作成します。
- ファイル作る(touch README.md)
- git add -A
- git commit -m 'Added …’
- git push origin master
この4ステップでファイル作成からgitHubへのpushが完了します。
実業務での一般的な流れは逆の流れとなります。
まずは、GitHubでリポジトリを作成そのときに
Add a README file
Add .gitignore
にチェックしてリポジトリを作成します。
そしてURLをコピーして、pullすることで、ローカルリポジトリとつなげます。
リモートのブランチをcloneする
こちらの記事がわかりやすいです。
https://qiita.com/shim0mura/items/85aa7fc762112189bd73
全ブランチをリモートリポジトリからpullする
こちらの記事がわかりやすいです。
https://qiita.com/muraikenta/items/e590a380191971f9c4c3