↓わからなかったら、まずはこれ!
再入門のためのGitまとめ
etc
- git add filename filenameをステージングする
- git add . 全部ステージング(コミット候補にする)
- git rm --cache filename filenameをステージングから解除
- git commit -m "comment" コメント付きでコミットする
- git push origin develop developにプッシュする
- git status 現在のコミットやステージングやブランチ等の状態を確認
- git pull --rebase マージ分を前に持ってきて、自分の更新を後ろに回す
- git checkout branchname ブランチをbranchnameに切り替える
-
ローカルとリモートのブランチ名を変更する
- ローカルの場合、1コマンドでブランチ名を変更できる
- リモートの場合、1コマンドでブランチ名の変更はできない
- 別の名前でブランチを複製し、複製元ブランチを消すことで実現している
-
ローカルとリモートのブランチ削除方法
- ローカルとリモートでコマンドの書き方が異なる
- ブランチ間でファイルの差分を見る方法
- 図で分かるgit-mergeの--ff, --no-ff, --squashの違い
- gitのtagをリモートにpushする
Gitのインストール
自分は主に Cygwin + Git を使い、
補助的に TortoiseGit を使っている。
- Cygwin + Git
- コマンドラインなので、導入と学習のハードルは高い
- Windows 上で使うなら、これが一番動作が軽い
- git-flow が使える
- TortoiseGit
- TortoiseSVN を使っていた人には、一番使いやすい
- アイコンオーバーレイで、ファイルの現状がリアルタイムにわかる
- オーバーレイが見えなくなった時は→ WindowsのGit環境構築手順
- 右クリックが充実
- 差分確認ツールが右クリックで起動できるので楽
- ログも右クリックで起動できて便利
- git-flow が使えない
- プラグインのようなものがあるかも
- SourceTree
- GUI なので、なんとなくわかりやすくなっている
- git-flow が使える
- Windows だと動作のひとつひつが遅い
- 自分の環境だけかもしれない
- Mac は速いらしい
コミットの取り消し、打ち消し、上書き
- http://qiita.com/shuntaro_tamura/items/06281261d893acf049ed
- git reset --hard 最新のコミットに全部戻す。戻した履歴を残さない
- git checkout HEAD^ ひとつ前のコミットに戻す
- 3つ前だとHEAD^^^かHEAD^3と書ける
- http://qiita.com/takoba/items/bcda4c796778ecabe3b1
リモートリポジトリから更新する
- git fetch
- リモートリポジトリの更新情報を、ローカルリポジトリに持ってくる
- ローカルのファイルには何もしない
- git merge
- fetch で手に入れた更新情報を、ローカルのファイルを適用する
- git pull
- fetch → merge を続けて行う
- 厳密には少し意味合いが異なる。
- git pull --rebase
- ローカルで commit した後に push したいのに、リモートリポジトリで他の commit がある時に用いる
- 「私の変更作業は皆が変更を完了したものをベースとして行いたい」という意志で用いる
- 変更履歴に Merge commit が付かず、変更履歴が綺麗に保たれる
- https://www.atlassian.com/ja/git/tutorial/remote-repositories#!pull
自分以外の人が作ったブランチに移る
リモートリポジトリにあるブランチは、
ローカルリポジトリで origin/
を付けて取り扱います。
この origin/
が付いたブランチは 追跡ブランチ と呼ばれています(これが自分以外の人が作ったブランチ)。
リモートリポジトリにあるブランチを表示するには…
-
git branch -r
: 追跡ブランチを一覧表示 -
git branch -a
: ローカルのブランチと追跡ブランチを一覧表示
追跡ブランチをチェックアウトしてプルすることで、
追跡ブランチの状態になります。
- git checkout origin/branch_name
- git pull origin branch_name
↑のそれぞれのコマンドで文句を言われたら、内容に従った対処を行います。
addしたのを取り消す
- git rm --cached ファイル名
- http://d.hatena.ne.jp/mrgoofy33/20100910/1284068244
管理対象から無視する
.gitignore を用いる。
リポジトリごとに設定する方法と、自分のみ全リポジトリで管理対象から無視する方法がある。
-
gitで管理しないファイルを無視させる .gitignore
- 一般的な .gitignore の書き方
-
.gitignoreの存在を我々は見過ごしてはならない。
- とても参考になる!
- 項目「毎回、同じファイルを ignore するのは面倒、でも戦争も起こしたくはない」に、自分のみ全リポジトリで管理対象から無視する方法が書いてある。
gitの管理対象から特定のファイル、ディレクトリを削除する
- http://qiita.com/ytkt/items/a2afd6be8e4f06c1ea25
- git rm filename filenameをリポジトリから消す。ファイルそのものも消す
- git rm -r dirname ディレクトリをリポジトリから消す。ディレクトリそのものも消す
viでコメント書き
- マージした時にviが立ち上がったら、:wqで「上書き」「終了」
- viエディタの使い方/vi.html
pushのデフォルト設定
- git push時に表示されるwarning:
push.default is unset...
の意味と解決方法 - git の push.default 設定を理解する
- gitのpush.defaultに関するノウハウ
ログの表示手法色々
GitHub
etc
GitHubにあるリポジトリをローカルにcloneする方法
-
git clone URL
- URL は GitHub の SSH Clone URL を参照
- SSH ではなく HTTPS で通信する場合は HTTPS の URL を参照
- GitHub のページ上で HTTPS と SSH のリンクをクリックすると URL を切り替えられます
- git-flow を導入するなら
git flow init
- 質問には、基本的に初期値のまま(何も書かずにEnter)で構わない
- 環境によってはきちんと入力する必要がある。わからない場合は、リポジトリの管理者に問い合わせること
GitHubで毎回UsernameとPasswordを訊いてくるのを抑える方法
.git/config の repository の URL が https 経由になっているのが原因。
- それぞれの環境の.gitフォルダにあるconfigファイルをテキストエディタで開く
- [remote "origin"] の url の https://github.com/ を git@github.com: に変更する
git-flow
- git-flow cheatsheet
- Git-flowって何?
- いまさら聞けない、成功するブランチモデルとgit-flowの基礎知識
- A successful Git branching model の和訳
マージ競合時の対応
競合箇所をテキストエディタで修正するのが常道かもしれないが、
変更箇所がたくさんあると大変。
そこで git の mergetool を用いる。
mergetool を起動
- コマンドプロンプト上でリポジトリがあるディレクトリまで移動
-
git mergetool
を実行- .gitconfig で mergetool の設定が書かれていない場合、警告を受ける。
後述で解決するとして、ここでは無視して構わない
- .gitconfig で mergetool の設定が書かれていない場合、警告を受ける。
- 競合しているファイルごとに、どのツールを使って競合を解消するかを聞いてくる。
基本はデフォルトに設定してあるものを使うので、そのままEnter - ツール上で編集が終わったら、ツールを終了させる
- 何も変更していない場合は「競合は解決したのか?」と訊いてくる。yかnで答える
- 全部のファイルの対応が終わるか、途中で Ctrl-c でやめると、mergetool が終了
参考
Gitコンフリクト解消ガイド(git mergetoolの使い方)
競合解決ツールに vimdiff を用いる
vim をインストールしている環境であれば、vimdiff が使える。
vimdiff は3+1画面。
vimdiff2 は3画面。
.gitconfig に vimdiff を設定
コマンドプロンプト上で
git config --global merge.tool vimdiff
を実行すると、
.gitconfig に mergetool の競合解決ツールのデフォルト設定が書き込まれる。
これで、mergetool 起動時に毎回警告を受けなくて済むし、
競合解決時にいちいちツールを指定しなくてもよくなり、便利。
参考
Mac で使える git mergetool をいろいろ試してみる - Vimdiff2
vindiff のコマンド
最低限覚えておきたいコマンド↓
- [ c :: vimdiff時前の変更箇所へ
- ] c :: vimdiff時次の変更箇所へ
- :diffget LOCAL :: カーソルがある競合箇所をLOCALウィンドウのものを適用
- :diffget BASE :: カーソルがある競合箇所をBASEウィンドウのものを適用
- :diffget REMOTE :: カーソルがある競合箇所をREMOTEウィンドウのものを適用
参考
【IT支援部】viの分割時およびvimdiffのショートカットキー
vim のキーバインドを変更
いちいち :diff REMOTE
のようにコマンドを書くのは面倒。
そこで vim の設定ファイル .vimrc に、キーバインドを書いておく。
if &diff
map <leader>1 :diffget LOCAL<CR>
map <leader>2 :diffget BASE<CR>
map <leader>3 :diffget REMOTE<CR>
endif
leader はバックスラッシュのこと。
バックスラッシュ→3 を入力すると、競合箇所が REMOTE ウィンドウのものに置き換わる。