3. Git に慣れてきたら...。 - ncxx-sl-lab/git-tutorial GitHub Wiki
ここからのコマンドは、最低限のGitコマンドを操作出来てからトライしてみましょう。
git log --stat
詳細に細かく履歴を見たい時は下記のようにしてください。
git log --decorate --graph --name-status --oneline
git pull
や git merge
でコンフリクトが発生し、自分の手で解決したい。
そんな時はgit status
すると、コンフリクトしたファイルが赤く表示されます。
$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 3 different commit(s) each, respectively.
#
# Changes to be committed:
#
# modified: templates/guide.html
#
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: templates/index.html
#
この場合 templates/index.html がコンフリクトしているようです。
コンフリクトしたとされるファイルをエディタで開いてください。"<<<<<<<" と ">>>>>>>" に囲まれた部分がコンフリクトしています。
<<<<<<< HEAD
<div class="container">
=======
<div>[% IF foobar %]
>>>>>>> 3100b66ffb26bb8b876cb47d68d2b91b4ec17f7f
"=======" を挟んで "HEAD" とある側が自分の変更、反対側が相手の変更です。
意図を読むか相談するかして、二つの変更を手動でマージします。分からなくなった場合は、いつでも git reset --hard して開発者を呼んでください。
この例だとこれが正しそうです。
<div class="container">[% IF foobar %]
このようにしてコンフリクトマーカーをすべて消し去ったら、そのファイルを git add
し (こうすることでコンフリクトを解消したことをシステムに伝えます)、いつものようにコミット&プッシュします。
コンフリクトしているファイルが複数ある場合は、全部に対して手動マージしてからコミットしてください。
$ git add templates/index.html
$ git commit
$ git push
push している場合やよくわからない場合は、開発者に頼んでください。
まだ push されておらず自分の手で解決したい場合は、以下のようにしてください。
theme ブランチに行うべき変更を master ブランチにコミットしてしまった場合。その直後なら
(theme ブランチに戻る)
$ git checkout theme
(master の最新のコミット=誤った変更を theme ブランチに適用)
$ git cherry-pick master
(master の最新のコミットを巻き戻す)
$ git revert master
これで完了です。コンフリクトが発生するなどして分からなくなったら、git reset --hard
して開発者を呼んでください。
git grep '<var>word</var>'
で、リポジトリ内からその単語を含むファイルと行を表示できます。
ふつうに検索すると、アプリのコードも検索されてしまうので最後にディレクトリ名を加えて以下のようにするのがいいです。
$ git grep 'TODO' templates
templates/ch.html:[% # TODO : 外部化したい %]
templates/campaign.html: [% #TODO このテーマを使うボタンが動かない %]
前回のコミットに戻したい。
git reset --hard HEAD^
任意のコミットに戻りたい時は HEAD^
の代わりにコミットのハッシュ値を指定する。
そうすれば任意のコミットまで戻れる。
コミットのハッシュ値は git log
調べればわかる。
ハッシュ値は全て指定しなくても頭の7桁ぐらいで一意になります。