起

ムムム。1
HEAD detached from origin/master
なんか出てるけど、意味わからんからとりあえず無視。
あれ?右端にはいつもmaster
と出ていたのに、今はsha1っぽい番号が…
でも今はそれよりも、早くgit push
して出かけないと。
承

ぐは。push
通らへんし。
しばしググると、どうやらgit reflog
に解決の糸口があるらしい。
転
よくわからんが、やってみる。2
~/.emacs.d ❯❯❯ git reflog
1b97169 (HEAD) HEAD@{0}: commit (merge): mod
7d8e5fe HEAD@{1}: commit: mod
47361b3 (origin/master) HEAD@{2}: checkout: moving from 66f697eab8fc6f2e82f29b63
66f697e HEAD@{3}: commit (amend): fix
cfa08ff HEAD@{4}: commit: fix
85f5238 HEAD@{5}: commit: delete
47361b3 (origin/master) HEAD@{6}: checkout: moving from be561655e5307766c5a53284
be56165 HEAD@{7}: checkout: moving from bc06fe68c34b1f6003baedb608aab4d6fdb40dc8
bc06fe6 HEAD@{8}: checkout: moving from 8736c9838f9b4fcb1c1031197a2b9eebd2a2a2bd
8736c98 HEAD@{9}: merge origin/master: Merge made by the 'recursive' strategy.
43ba576 HEAD@{10}: commit (amend): fixed
47361b3 (origin/master) HEAD@{11}: commit (amend): fixed
ccf0fa3 HEAD@{12}: commit: fixed
bc06fe6 HEAD@{13}: checkout: moving from master to bc06fe6
5e08fde (master) HEAD@{14}: checkout: moving from bc06fe68c34b1f6003baedb608aab4
bc06fe6 HEAD@{15}: checkout: moving from be561655e5307766c5a53284721c5e16ca55da0
be56165 HEAD@{16}: checkout: moving from master to be56165
5e08fde (master) HEAD@{17}: checkout: moving from be561655e5307766c5a53284721c5e
be56165 HEAD@{18}: checkout: moving from b791e31898c80db7f4811f5f2981d64532c9e3f
b791e31 HEAD@{19}: checkout: moving from master to b791e31
5e08fde (master) HEAD@{20}: commit: add
bc06fe6 HEAD@{21}: commit: improve
be56165 HEAD@{22}: commit (amend): mod
b41820b HEAD@{23}: commit (amend): mod
なんか、checkout: moving from master to...
とか出始めているのがすでに怪しそう。
とすると、その直前の5e08fde
に戻すか。
いや待て。
5e08fde
にはmaster
とあるけど、なぜか他にもたくさんある…。
念のために、その一つ前のbc06fe6
に戻そう。
ひとまず大切なファイルをバックアップしといてgit reset
を試す。

おお、右端の表示がmaster~1
に変わってるやん!
HEAD@{xx}
なんて初めて使ったけど、なんか効いてる。よく分からんけど!
まだ、HEAD detached from origin/master
が表示されてるけど、ここまでくればなんとかなるかも。
グラフ3を出してみる。
/.emacs.d ❯❯❯ git gr
* 47361b3 (origin/master) 2018-08-11 hidsh fixed
| * 5e08fde (master) 2018-08-11 hidsh add
|/
* bc06fe6 (HEAD) 2018-08-08 hidsh improve
* be56165 2018-08-07 hidsh mod
HEADが5e08fde
の直前に戻ってる!
なるほど、master~1
というのはmaster
の一つ前ということか。
行ける気がしてきた!
空コミットして、ひとまずfetch -f
する。4
~/.emacs.d ❯❯❯ git commit -m 'ggg'
HEAD detached from origin/master
nothing to commit, working tree clean
~/.emacs.d ❯❯❯ git fetch -f origin HEAD:master
From github.com:hidsh/.emacs.d
+ 5e08fde...47361b3 -> master (forced update)
強引だったけど、なんとかmaster
に戻れた、のか。
ここでpull
してみる。

オッケー!!
やっとmaster
に戻れた。
もう一度グラフを出してみる。
~/.emacs.d ❯❯❯ git gr
* 47361b3 (HEAD, origin/master, master) 2018-08-11 hidsh fixed
* bc06fe6 2018-08-08 hidsh improve
* be56165 2018-08-07 hidsh mod
行けてるっぽい。
転 2
ふう、なんとかなった。
じゃあ入れたかった変更を入れるか。5
~/.emacs.d ❯❯❯ git c -m 'add'
[detached HEAD 0a2d7b0] add
5 files changed, 341 insertions(+), 1 deletion(-)
create mode 100644 ...
~/.emacs.d ❯❯❯ git s
HEAD detached from origin/master
nothing to commit, working tree clean
ほげ。またもHEAD detached from origin/master
とは。
当然、push
しても弾かれる。
~/.emacs.d ❯❯❯ git push
fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
state now, use
git push origin HEAD:<name-of-remote-branch>
でも、ちょっと分かってきたかも。
一旦checkout
6して、git
の勧める通りにブランチを切ってみる。
~/.emacs.d ❯❯❯ git co master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:
0a2d7b0 add
If you want to keep it by creating a new branch, this may be a good time
to do so with:
git branch <new-branch-name> 0a2d7b0
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
~/.emacs.d ❯❯❯ git branch br_add_hoge
~/.emacs.d ❯❯❯ git gr
* 47361b3 (HEAD -> master, origin/master, br_add_hoge) 2018-08-11 hidsh fix
* bc06fe6 2018-08-08 hidsh improve
* 47361b3 (HEAD -> master, origin/master, br_hoge) 2018-08-11 hidsh fix
* bc06fe6 2018-08-08 hidsh improve
* be56165 2018-08-07 hidsh mod
:
~/.emacs.d ❯❯❯ git branch
br_add_hoge
* master
~/.emacs.d ❯❯❯ git b-sw br_add_hoge
Switched to branch 'br_add_hoge'
~/.emacs.d ❯❯❯ git b-push
fatal: The current branch br_add_hoge has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin br_add_hoge
おっと。では、ここもgit
の勧める通りに入力。
~/.emacs.d ❯❯❯ git push --set-upstream origin br_add_hoge
Total 0 (delta 0), reused 0 (delta 0)
To github.com:hidsh/.emacs.d.git
* [new branch] br_add_hoge -> br_add_hoge
Branch 'br_add_hoge' set up to track remote branch 'br_add_hoge' from 'origin'.
続いてpull
→push
してみる。
~/.emacs.d ❯❯❯ git pull
Already up to date.
~/.emacs.d ❯❯❯ git push
br_add_hoge
Everything up-to-date
よし。今度は通った。
ここでmaster
に戻って9、ブランチをmerge
しとく。
~/.emacs.d ❯❯❯ git b-sw-master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
~/.emacs.d ❯❯❯ git merge br_add_hoge
Already up to date.
ここまではオッケー。
では改めて、変更のコミットを。
~/.emacs.d ❯❯❯ git add .
~/.emacs.d ❯❯❯ git c -m 'test commit'
[master f1870ae] test commit
1 file changed, 1 insertion(+), 1 deletion(-)
~/.emacs.d ❯❯❯ git gr
* f1870ae (HEAD -> master) 2018-08-11 hidsh test commit
* 47361b3 (origin/master, origin/br_add_hoge, br_add_hoge) 2018-08-11 hidsh fix
* bc06fe6 2018-08-08 hidsh improve
* be56165 2018-08-07 hidsh mod
よしよし。
では、今度こそ念願のpush
を。できるか??

よっしゃー!
ふう、今度こそ終わり。
最後にブランチを消しとこう。
~/.emacs.d ❯❯❯ git branch -d br_add_hoge
Deleted branch br_add_hoge (was 47361b3).
結
まあ、あれです。
気づいたときには10すでに悪いことは起きていて、後になってややこしいことになるのが常なのかもしれません。
盆休みにgit
と戯れる日々はつづく。
参考
git pushできないときの対処法
detached HEAD から脱出する方法を git の内部構造から探る
Git概念の整理を試みる
-
alias.s=status
↩ -
今回はGitHubの
.emacs.d
的なリポジトリだったので気軽に試せたけど、これが社内のだったらと思うと… ↩ -
alias.gr=log --graph --date-order --all --pretty=format:'%h %Cred%d %Cgreen%ad %Cblue%cn %Creset%s' --date=short
↩ -
実際は
git pull
は失敗するし、git fetch
も-f
つけないと失敗したので。 ↩ -
alias.c=commit
↩ -
alias.co=checkout
↩ -
alias.b-sw=checkout
↩ -
alias.b-push=push -u origin
↩ -
alias.b-sw-master=checkout master
↩ -
いやいや、今回は気づいていたにもかかわらず、スルーしようとしていたのか。 ↩