memolu

いろいろメモってます

gitコマンド備忘録

経緯

会社ではwin環境でsourcetreeを使用しているのですがセキュリティソフトとの相性が悪く動作が著しく重くなっていました。
いい機会なのでいっそのことコマンドラインでgitを操作しようと思い調べつつ作業することが増えました。
自分向けの備忘録ですが、基本コマンドから書いていきます。

git init - リポジトリの作成

$ git init
Initialized empty Git repository in /Users/yt-ymmt/Desktop/module/.git/

プロジェクトフォルダのルートで叩くと「.git」というファイルが出力されます。
gitを情報はこのファイルに集約されているが、通常意識することはないでしょう。

git clone - リポジトリの複製

既存のリポジトリを複製する際はこちらを使用します。githubとかstashとか使ってると利用することは多いですね。

$git clone リポジトリのURL 作成するフォルダ(なくても可)

指定方法としてはこんな感じみたいです。

プロトコル 指定方法
rsync rsync://<ホスト名>/<Gitリポジトリのパス>
HTTP http://<ホスト名>[:ポート番号]/<Gitリポジトリのパス>
HTTPS https://<ホスト名>[:ポート番号]/<Gitリポジトリのパス>
git git://<ホスト名>[:ポート番号]/<Gitリポジトリのパス>
SSH ssh://[ユーザー名@]<ホスト名>[:ポート番号]/<Gitリポジトリのパス>
ローカルファイル <Gitリポジトリのパス>もしくはfile://<Gitリポジトリのパス>

git fsck - リポジトリのチェック

リポジトリが破損している場合、feckを使用して該当箇所を抽出することが可能です。

$git fsck

notice: HEAD points to an unborn branch (master)
Checking object directories: 100% (256/256), done.
notice: No default references

--fullをオプションにつけるとより詳細にチェックできます。

$git fsck --full

git status - 変更ファイルの確認

修正されているファイルの一覧を取得できます。

$git status

git diff - 差分を確認

ファイル内の差分を確認することができます

$git diff <変更を確認するファイル>

例えば以下のようになります。

$git diff main.js

diff --git a/main.js b/main.js
index 44e9f8c..c757b7b 100644
--- a/main.js
+++ b/main.js
@@ -1,7 +1,4 @@
 import myFunc from './myFunc.js';
 
 console.log(myFunc.hoge());
-console.log(myFunc.foo());
-console.log(myFunc.foo());
-console.log(myFunc.foo());
 console.log(myFunc.foo());
\ No newline at end of file

git add - ファイルをコミットする対象にする

一つづつコミット対象にする場合はファイル名を記載します

$git add <ファイル名> <ファイル名> ...

-Aをオプションに指定すると新規作成・更新したファイルを全てステージできます。

$git add -A

git commit - コミットする

$git commit

通常この状態から実行すると、vimなどエディターが立ち上がってコミットメッセージを追加できます。

-aオプションをつけると変更ファイルを全てステージした後にコミットします。つまり以下の2つは同じ処理をしています。

$git add -A
$git commit
$git commit -a

-mオプションをつけるとエディターを立ち上げることなくコミットメッセージを入力できます。

$git commit -m "コミットメッセージ"

--amendオプションをつけると一つ前のコミットを編集することができます。 編集にはvimなどのエディタが起動します。

$git commig --amend

git log - コミットログを確認する

ブランチのコミットログを確認することができます。

$git log

-pオプションをつけるとファイルの差分も含めたログを確認することができます。

$git log -p

ログはエンターキーを押すごとに表示されていきます。
qを入力することでログ確認モードを終了することはできます。

git reset - コミットを取り消す

間違ってコミットしてしまった場合、以下のように行います。

$git reset リセットタイプ 戻りたいコミット

リセットタイプは以下の2つです。

  • --soft

--softをオプションに指定すると、作業ツリーへの変更は保ったまま、コミットだけを取り消してくれます。

  • --hard

--hardをオプションに指定すると、作業ツリーの変更ごとコミットも取り消されます。

例えば誤ったコミットメッセージでコミットしてしまった場合以下のように行えばよいでしょう。

$git reset --soft HEAD^
$git commit -m "修正後のコミットメッセージ" 

または、前述したgit commit --amendで解決するのが一般的です。

git revert - コミットを打ち消すためのコミットを行う

git revertはコミットを打ち消すためのコミットを行うため、作業履歴を汚さず、新しくコミットを生成します。
上で説明したgit resetはgitの履歴を修正する機能でしたのでログを残すか過去を改ざんするかが機能の差異になります。

$git revert <コミット名>

git branch - ブランチの確認/作成をする

まずは既存ブランチを確認する場合はgit branchだけ実行します。

$git branch
* master
  test

remote側にあるブランチも確認する場合-aオプションをつけましょう。

$git branch -a
* master
test
remotes/origin/master
remotes/origin/test

新しく作成する場合はブランチ名を入力します。

$git branch <ブランチ名>

ブランチを削除する場合-dオプションを追加します。

$git branch -d <削除したいブランチ名>

↑の場合ローカルブランチのみ削除されます。 リモートブランチを削除する場合は、pushコマンドを使用します。

$git push --delete origin <削除したいブランチ名>

git checkout - ブランチを切り替える

作成したブランチを切り替える場合はgit checkoutを使用します。

$git checkout <ブランチ名>

-bのオプションをつけるとブランチを作成しつつブランチ切り替えまで行うことが可能です。 これよく使いますね。

$git checkout -b <新しいブランチ名>

.をつけると作業ツリーの変更を削除することができます。

$git checkout .

// 個別に変更を破棄する場合
$git checkout <ファイル名>

git merge - ブランチをマージする

ブランチをマージする場合、git mergeを使用します。

$git merge <取り込み元のブランチ>

git stash - 作業ツリーの変更を一時的に保存する

stashは修正内容を一時的に保存することが可能です。

$git stash save <保存する名前>

保存した修正リストはlistで確認できます。

$git stash list

保存した修正内容を現在のブランチに適用するにはpopを使用します。

$git stash pop

git push - リモートリポジトリに反映する

リモートリポジトリのブランチに修正を反映します。
よく使われるのはoriginとかでしょうか。

$git push origin <リモートのブランチ名>

-uオプションをつけるとローカル側のブランチとリモート側のブランチ側が紐付いて、次回からブランチ名を入力せずよくなります。

$git push -u origin <リモートのブランチ名>

// 一度-uをつけるとpushするだけでよい
$git push 

git pull - リモートリポジトリから変更をマージする

pushとは逆にリモート側の変更をマージする場合、pullを使います。

$git push origin <リモートのブランチ名>

git merge - 変更履歴の統合

例えばdevelopブランチにworkAブランチの作業を取り込みたい場合などにmergeコマンドを使用します。 対象のブランチにcheckoutした後、mergeコマンドで統合します。

$git checkout develop
$git merge <ブランチ名>

デフォルト状態の場合、ファストフォワードといってcommitとpushを同時に行う方法で統合されてしまいます。 統合用のコミットを作成するためには--no-ffオプションをつけることで、ファストフォワード可能な場合でも新規コミットを作成することが可能です。

$git merge --no-ff <ブランチ名>

まとめ

いったんここまでにしておきます! コマンドからgitを使うとgulpなどすぐ叩きにいけるのが地味に便利ですね。