gitでpushしようとすると、remote repositoryの方が新しくて以下のようなエラーがでることがある。
> git push ... error: failed to push some refs to 'https://github.com/hhachiya/xxx' ヒント: Updates were rejected because a pushed branch tip is behind its remote
じゃあ、remote repositoryからpullして、local repositoryを最新にしようとすると、今度は、localとremoteで同じファイルを更新していて競合が起こることがある。
> git pull ... Unpacking objects: 100% (6/6), done. From https://github.com/hhachiya/xxx error: Your local changes to the following files would be overwritten by merge: py-faster-rcnn/lib/fast_rcnn/test.py Please, commit your changes or stash them before you can merge. Aborting
そんな時に役にたつのが、stashオプションである。とりあえずlocalで更新した分を退避させておくことにより、pullをすることができるようになる。
> git stash Saved working directory and index state WIP on xxxx: 0978f10 xxxx HEAD is now at 0978f10 xxxx > git pull Merge made by the 'recursive' strategy. py-faster-rcnn/lib/fast_rcnn/test.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
しかし、これでは、せっかくローカルで更新した分が反映されなくなってしまうので、退避したものと、pullで最新になったlocal repositoryの差分を確認してみる。
> git stash list stash@{0}: WIP on xxx: 0978f10 yyy stash@{1}: WIP on xxx: dbc1af8 yyy > git diff stash@{0} diff --git a/py-faster-rcnn/lib/fast_rcnn/config.py b/py-faster-rcnn/lib/fast_rcnn/config.py index bc1a81f..a8bb3e2 100755 --- a/py-faster-rcnn/lib/fast_rcnn/config.py +++ b/py-faster-rcnn/lib/fast_rcnn/config.py @@ -68,7 +68,7 @@ __C.TRAIN.BBOX_REG = True __C.TRAIN.BBOX_THRESH = 0.5 # Iterations between snapshots -__C.TRAIN.SNAPSHOT_ITERS = 10000 +__C.TRAIN.SNAPSHOT_ITERS = 1000 # solver.prototxt specifies the snapshot path prefix, this adds an optional # infix to yield the path: <prefix>[_<infix>]_iters_XYZ.caffemodel @@ -132,7 +132,7 @@ __C.TEST = edict() ...
これで、差分を確認し、問題がなければ退避したものを、local repositoryに反映させる。
> git stash apply stash@{0}