Gitコマンドまとめ

ローカルで新規リポジトリ作成し、リモートへプッシュ

git initはGitリポジトリを新たに作成する。バージョン管理外の既存プロジェクトをGitリポジトリに変換したり, カレントリポジトリの初期化を行う.

git addよりファイルをインデックスへ追加する. コミット前の一時保存場所への追加と思えば良い.

半角空けることにより複数のファイル・ディレクトリの指定が可能.

  • -a オプション: 変更されたファイルを全てインデックスに追加.
  • -m オプション: メッセージをつけてコミットする. もしつけない場合はメッセージを編集するためのエディタが起動.


% mkdir {project}
% cd {project}
% git init
% touch README.md
% git add README.md aaa.html
% git add -A // 変更を全てインデックスへ追加
% git commit -m "first commit" // コメントを記載し, コミット
% git remote add origin git@git....git // リモートレポジトリのURL情報を追加. どこへpushするのか
% git push -u origin master // リモートリポジトリのmasterへプッシュ


ローカルの既存リポジトリをリモートへプッシュする

% git remote add origin https://github.com...git //リモートブランチを追加
% git push -u origin master //追加したリモートブランチへプッシュ


ブランチを作成

% git branch develop
% git push origin develop
% git checkout develop
% git merge -m "create develop" master


ブランチの切替

ローカルの変更はそのままに, ブランチを切替可能.

$ git checkout -b feature-xxx


ユーザー名とメールアドレスの設定

% git config user.name "xxx"
% git config user.email "xxx@gmail.com"

他のリポジトリも共通で設定する場合は

% git config --global user.name "xxx"
% git config --global user.email "xxx.gmail.com"

git config は、通常は --global を付けて, 個別に違う名前を使いたい時だけ --global 無しで設定する.


リモートoriginのURL確認

% git remote -v
origin https://github.com/xxx


ローカルリポジトリからリモートリポジトリへプッシュ時のエラー

% git push origin master

※注意※

最初に下記のように表示される場合がある。

% git push origin master
To https://github.com/xxx/xxx
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/xxx/xxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

これはREAD.meがリモートリポジトリにあり, マージ作業が必要になるため. 一旦 pull を行う.

% git pull origin master
From https://github.com/xxx/xxx
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 README.md | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 README.md


リモートからローカルへのクローン

% git config --global http.sslVerify false
% git clone git@xxx...
% git config --global http.sslVerify true

sslVerifyを解除しない場合、SSL certificate problem: Invalid certificate chainと怒られてしまう。

WARNING: UNPROTECTED PRIVATE KEY FILE!と怒られた場合は`、 こちらを参照。


(コミット前の)ローカルの変更を全て取り消す

% git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   Swift/xxx
    modified:   Swift/yyy

no changes added to commit (use "git add" and/or "git commit -a")

% git checkout -- Swift/xxx
% git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   Swift/yyy

no changes added to commit (use "git add" and/or "git commit -a")

(コミット前の)ローカルの(ファイルの)変更を一部取り消す

$ git checkout .elasticbeanstalk/config.yml


(コミット前の)ローカルの変更を全て取り消す

% git checkout .


プル

% git status                                                                                                                                                                                                       (master)
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

% git pull origin master
From https://github.com/xxx/Swift
 * branch            master     -> FETCH_HEAD
Already up-to-date.


リポジトリ削除

fetchについては、こちら

% git fetch
% git log -1
% git log -1 origin
% rm -rf project_folder


Git flow

Git flow は複数人で開発する際の運用ルール管理プラグイン.

% git clone xxx

% brew install git-flow

% git checkout master

Branch master set up to track remote branch master from origin.
Switched to a new branch 'master'

% git flow init

Which branch should be used for bringing forth production releases?
   - develop
   - master
Branch name for production releases: [master]

Which branch should be used for integration of the "next release"?
   - develop
Branch name for "next release" development: [develop]

How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []


% git config user.name "Gonbei Nanashi"
% git config user.email "xxx@gmail.com"


リモートリポジトリURLを設定する

% git remote set-url origin git@xxx.github.com:xxx/xxx.git


設定の一覧を表示する

% git config --global --list
% git config --list //現在のリポジトリの設定のみ表示


不要なファイルを管理対象外にする

% echo {ファイル名} >> .gitignore


ブランチを作成しつつ、チェックアウト

% git fetch -a //フェッチ
% git branch -a //ブランチ全て確認
% git checkout -b release/1.13.3 origin/release/1.13.3 //ブランチを作成しつつ, チェックアウト


ブランチ削除

% git branch -d release/1.13.3 //削除
% git branch -D origin/release/1.13.3 //強制削除


特定のコミットまでバージョンを戻す

ハッシュ値を指定し, バージョンを戻す.

% git reset --hard {hash}