LoginSignup
12
12

More than 5 years have passed since last update.

備忘録Git

Last updated at Posted at 2015-03-19

↓わからなかったら、まずはこれ!
再入門のためのGitまとめ

etc

Gitのインストール

自分は主に Cygwin + Git を使い、
補助的に TortoiseGit を使っている。

  • Cygwin + Git
    • コマンドラインなので、導入と学習のハードルは高い
    • Windows 上で使うなら、これが一番動作が軽い
    • git-flow が使える
  • TortoiseGit
    • TortoiseSVN を使っていた人には、一番使いやすい
    • アイコンオーバーレイで、ファイルの現状がリアルタイムにわかる
    • 右クリックが充実
      • 差分確認ツールが右クリックで起動できるので楽
      • ログも右クリックで起動できて便利
    • git-flow が使えない
      • プラグインのようなものがあるかも
  • SourceTree
    • GUI なので、なんとなくわかりやすくなっている
    • git-flow が使える
    • Windows だと動作のひとつひつが遅い
      • 自分の環境だけかもしれない
      • Mac は速いらしい

コミットの取り消し、打ち消し、上書き

リモートリポジトリから更新する

  • git fetch
    • リモートリポジトリの更新情報を、ローカルリポジトリに持ってくる
    • ローカルのファイルには何もしない
  • git merge
    • fetch で手に入れた更新情報を、ローカルのファイルを適用する
  • git pull
  • 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 : ローカルのブランチと追跡ブランチを一覧表示

追跡ブランチをチェックアウトしてプルすることで、
追跡ブランチの状態になります。

  1. git checkout origin/branch_name
  2. git pull origin branch_name

↑のそれぞれのコマンドで文句を言われたら、内容に従った対処を行います。

addしたのを取り消す

管理対象から無視する

.gitignore を用いる。
リポジトリごとに設定する方法と、自分のみ全リポジトリで管理対象から無視する方法がある。

gitの管理対象から特定のファイル、ディレクトリを削除する

  • http://qiita.com/ytkt/items/a2afd6be8e4f06c1ea25
  • git rm filename filenameをリポジトリから消す。ファイルそのものも消す
  • git rm -r dirname ディレクトリをリポジトリから消す。ディレクトリそのものも消す

viでコメント書き

pushのデフォルト設定

ログの表示手法色々

GitHub

etc

GitHubにあるリポジトリをローカルにcloneする方法

  1. git clone URL
    • URL は GitHub の SSH Clone URL を参照
    • SSH ではなく HTTPS で通信する場合は HTTPS の URL を参照
      • GitHub のページ上で HTTPS と SSH のリンクをクリックすると URL を切り替えられます
  2. git-flow を導入するなら git flow init
    • 質問には、基本的に初期値のまま(何も書かずにEnter)で構わない
    • 環境によってはきちんと入力する必要がある。わからない場合は、リポジトリの管理者に問い合わせること

GitHubで毎回UsernameとPasswordを訊いてくるのを抑える方法

.git/config の repository の URL が https 経由になっているのが原因。

  1. それぞれの環境の.gitフォルダにあるconfigファイルをテキストエディタで開く
  2. [remote "origin"] の url の https://github.com/git@github.com: に変更する

git-flow

マージ競合時の対応

競合箇所をテキストエディタで修正するのが常道かもしれないが、
変更箇所がたくさんあると大変。
そこで git の mergetool を用いる。

mergetool を起動

  1. コマンドプロンプト上でリポジトリがあるディレクトリまで移動
  2. git mergetool を実行
    • .gitconfig で mergetool の設定が書かれていない場合、警告を受ける。 後述で解決するとして、ここでは無視して構わない
  3. 競合しているファイルごとに、どのツールを使って競合を解消するかを聞いてくる。 基本はデフォルトに設定してあるものを使うので、そのままEnter
  4. ツール上で編集が終わったら、ツールを終了させる
    • 何も変更していない場合は「競合は解決したのか?」と訊いてくる。yかnで答える
  5. 全部のファイルの対応が終わるか、途中で 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 ウィンドウのものに置き換わる。

参考
Vimの設定ファイルを作る
git mergeをvimdiffで

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12