リモートからブランチをとってくる (pullしたいって思った時)
pullじゃなくてfetch使ってからmergeしようね。
% git fetch origin <REMOTE_BRANCH_NAME>
% git checkout -b <LOCAL_BRANCH_NAME>
% git merge FETCH_HEAD
現バージョンをリリースした段階でバージョンのtagを切る
おもむろに、ローカルにあるtag一覧を取得。
$ git tag
リモートから最新のtagをとってくる。
$ git pull --tags
現バージョンのtagつけてやる
$ git tag -a <VERSION_NUM>
メッセージを記入して、リモートにプッシュする。
$ git push --tags
以前のバージョンのtagからブランチを切る
おもむろに、tagを指定してcheckout
$ git checkout <VERSION_NUM>
ブランチに属さなくなるので、そこから新たにブランチを切る
$ git checkout -b <BRANCH_NAME>
tagを間違えてつけてしまった場合のtagの切り直し方
ローカルのtagを削除
$ git tag -d <WRONG_VERSION_NUM>
リモートのtagを空のtag(存在しないtag)で上書きするように削除。
$ git push origin :refs/tags/<WRONG_VERSION_NUM>
正しいバージョンのtagつけてやる
$ git tag -a <CORRECT_VERSION_NUM>
メッセージを記入して、リモートにプッシュする。
$ git push --tags
バージョンアップ後のタグの更新で[rejected]
追加したタグを更新しようとしたら
$ git push --tags
怒られた。
error: failed to push some refs to <REMOTE_REPO_NAME>
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and merge 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 --tags
もう一度pushをこころみる
$ git push --tags
Everything up-to-date
うまくいったみたい。
git pull --tags するときに下記のメッセージが出た。
Fetching tags only, you probably meant:
git fetch --tags
fetchだけでもいいのかも。
mergeを途中でやめる
$ git merge --abort
git status
merge途中のファイルが残っていたら、
git clean -f
submoduleの変更などを破棄する
いじった覚えがないけどローカルで変更させてしまったみたい。
$ git status
# On branch develop
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
# (commit or discard the untracked or modified content in submodules)
#
# modified: app/Submodules/<SUBMODULE_DIR> (modified content)
#
no changes added to commit (use "git add" and/or "git commit -a")
普通に、
$ git checkout app/Submodules/<SUBMODULE_DIR>
としてもうまく破棄されなかったので、
$ cd app/Submodules/<SUBMODULE_DIR>
一旦ディレクトリまで移動してから
このディレクトリ以下をcheckoutする。
$ git checkout .
これで確認してみると、
$ git status
# Not currently on any branch.
nothing to commit (working directory clean)
すっきり。