おれろぐ #z_a_ki3

(・∀・) オイ!

Gitを学ぶ 〜後編〜

zaki3.hateblo.jp

前回に引き続き、クスールさんのGit勉強会後編です。

今日は、複数人リポジトリを触るので実践に近い感じです。

コンフリクトに対応する

共有ディレクトリをクローンする。

$ git clone [URL]

コンフリクトを起こすために一旦、ローカルリポジトリにコミットする。

$ git add [ファイル名]

リモートリポジトリの同じファイルを講師の方が編集、コミット、プッシュする。
※これでコンフリクトが発生する。

ローカルリポジトリをプッシュする。

$ git push

するとリジェクトが発生します。

To http://.../....git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'http://.../....git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

ローカルのリポジトリをリモートの最新で更新する。

$ git pull

更新した際、コンフリクトが発生した場合、以下のように挿入される。

<<<<<<< HEAD
自分の変更箇所
=======
既にPUSHされている変更箇所
>>>>>>> [コミットID]

これを適宜、修正してコミットしてプッシュすればOK!

ブランチ

現在のブランチを見る

$ git branch

新規のブランチを作る

$ git branch [ブランチ名]

git branch で確認する

$ git branch
* master
  [ブランチ名]

作ったブランチに切り替える

$ git checkout [ブランチ名]

こんな感じに表示される

Switched to branch '[ブランチ名]'
$ git branch
  master
* [ブランチ名]

リモートブランチにプッシュする場合は

$ git push origin [リモートでのブランチ名]

リモートリポジトリから変更を取得するが、マージしない。

$ git fetch

※pullはfetch+mergeのようなもの(同じではない)

マージする。

$ git checkout [マージ先]
$ git merge [マージ元]

マージする時は作業ブランチにmasterブランチの変更を取り込んで、
確認してからマージするのがオススメ!

(ローカル)ブランチを削除

$ git branch -d [ブランチ名]

(リモート)ブランチを削除

git push --delete origin [リモートブランチ名]

Tips

コミットの修正(プッシュ前)

直前のコミットコメントを修正する

$ git commit --amend

※デフォルトのエディタが開くので修正、上書きすればOK

直前のコミット漏れがあった場合に追加する

$ git commit --amend [ファイル名]

コミットを打ち消す

$ git revert [コミットID]

色々なかった事にする!!

reflogで作業履歴を確認する。

$ git reflog
f015603 HEAD@{0}: revert: Revert "追加した!"
e866524 HEAD@{1}: commit: 追加した!
88cd3af HEAD@{2}: commit (amend): 修正完了
4e75819 HEAD@{3}: commit (amend): 修正完了
9cfcd32 HEAD@{4}: reset: moving to HEAD^
70b81c8 HEAD@{5}: commit: mend
9cfcd32 HEAD@{6}: commit: 修正かんりょう

resetでhardオプションを指定して過去に戻る

git reset --hard HEAD@{2}

対象外のファイルを指定

ルートディレクトリに .gitignore ファイルを作成して、指定する。

# hoge.txt ファイルを対象外にする場合
hoge.txt
# hoge ディレクトリを対象外にする場合
/hoge

ちなみに各言語などで標準的な.gitignoreはgithubで公開されてます。

github.com

先生の秘伝のタレ

https://gist.github.com
プライベートになってるので興味のある方は参加してみて下さい( ´ ▽ ` )ノ

Gitは必要不可欠だし、もう少し理解を深めたら、会社で勉強会開催してみようかな。

Gitポケットリファレンス

Gitポケットリファレンス

[PR]クスールさんの勉強会

cshool.connpass.com

cshool.connpass.com

cshool.connpass.com

cshool.connpass.com

cshool.connpass.com