git使った開発で使うコマンド色々。最初はadd,commit,pushさえ覚えておけばOK!
基本
commit, push関連
ブランチ情報チェック(自分のいるブランチ、変更したファイル)
$ git status
ワークツリーからインデックスに追加
$ git add -p 追加するものを選択
$ git add -A すべて追加
差分チェック
$ git diff インデックスとワークツリーの差分(addする前の差分)
$ git diff --cached インデックスと最新コミット(addしてからの差分)
$ git diff HEAD ワークツリーと最新コミット
commit
$ git commit -a インデックスへadd,commit(git add -u -> git commitと同等)
$ git commit -v verbose
$ git commit --amend 直前のコミットをやり直す
push (githubのへのpush)
githubにブランチも作って、そこにpush
# git push origin <ローカルでのブランチ名>:<githubでのブランチ名>
ローカルとgithubのブランチ名はだいたい同じにするので、
$ git push origin change_hoge:change_hoge
とか。
すでにgithubにブランチ作っている場合
$ git push
merge
今のブランチにmasterブランチをマージしたい場合
$ git merge master
addの取り消し
個別にaddしてしまったファイルを取り消す場合
$ git rm --cached hoge.txt
まとめてaddしたものを取り消したい場合
$ git reset HEAD
commitの取り消し
ワークディレクトリ(ローカルの作業)ごと取り消す場合
$ git reset --hard HEAD^
ワークディレクトリは残しつつ、コミットのみ取り消す場合
$ git reset --soft HEAD^
- ポイント:HEADは直前のコミット。HEAD^は一つ前のコミット。
HEAD^とすることで、1つ前のコミットまでリセットする、という意味。
gitignoreの反映
一旦 ignoreしたいfileを削除する
$ git rm -r --cached filename or directory 例 log/*.log
$ vi .gitignore //ignore対象ファイルを加える
$ git add .gitignore
$ git commit -m ".gitignore is now working"
$ git push origin master
ブランチ切替関連
ブランチ情報など取得(fetch,mergeを両方やる)
$ git pull
現在のブランチを表示
$ git branch
ブランチの切り替え
$ git checkout ブランチ名
rename
ブランチのrename
$ git branch -m <oldname> <newname>
リモート(github)のブランチ切り替え方法
$ git fetch (リモートからレポジトリ取得)
$ git status ステータスを確認
$ git checkout -b hoge -t origin/hoge (githubにあるorigin/hogeと同じ内容のブランチhogeを作る)
$git branch (ブランチがhogeになっているか確認)
### 新しいブランチをgithubに空コミットする
$ git checkout -b new_branch (ブランチ作成)
$ git commit --allow-empty -m "make pull request" (空コミットを許可してコミット)
$ git push origin new_branch:new_branch (githubへpush)
ちょっと応用
git, githubからブランチを削除
例としてsearchというブランチを削除する
git からの削除
$ git branch -d search
githubからも削除する
git push プッシュ先リポジトリ ローカルのブランチ名:リモートのブランチ名
ここでは
プッシュ先リポジトリ origin
ローカルのブランチ名 (削除済み)
リモートのブランチ名 search
なので
$ git push origin :search
git, githubから履歴も含めファイルを削除(パスワードファイルとか誤っていれてしまって削除する場合)
$ git filter-branch -f --index-filter 'git update-index --remove "filename"' HEAD
$ git push --force
レポジトリの取得プロトコル方法を変更する
githubの二段階認証を有効にすると、httpsプロトコルでは毎回アクセストークンを入力しなくてはならなくなるので、sshに変更する
$ git remote -v
origin https://github.com/***/***.git (fetch)
origin https://github.com/***/***.git (push)
$ git remote set-url origin git@github.com:***/***.git
$ git remote -v
origin git@github.com:***/***.git (fetch)
origin git@github.com:***/***.git (push)
###gitのリポジトリ作成
$ git init
gitの空レポジトリをコミットする
$ git commit --allow-empty -m "make pull request"
backup リポジトリ作成
- 空のレポジトリ作る
$ mkdir /pub/repository/backup.git
$ cd /pub/repository/backup.git
$ git --bare init
- 履歴をコピー
$ cd {workdir}/
$ git push /pub/repository/backup.git master
(もとのディレクトリは捨てる rm -rf {workdir}
- 作業時はバックアップリポジトリからcloneする
$ git clone /pub/repository/backup.git {workdir}
- 作業が終わったらバックアップリポジトリに書き戻す
$ git push origin master
origin -> もとのリポジトリ(ローカルブランチ) master->マスタブランチ
エラー関連
fatal: remote origin already exists.が出るとき
$ git remote add origin git@github.com:example/test.git
fatal: remote origin already exists.
原因は既に同じ名前でリモートリポジトリが登録されている事。異なる名前でリモートリポジトリを作成する
$ git remote -v
origin git@github.com:example/test.git
$ git remote add origin2 git@github.com:example/test.git
$ git remote -v
origin git@github.com:example/test.git
origin2 git@github.com:example/test.git