LoginSignup
4
4

More than 5 years have passed since last update.

Git で pushできなくなったので、ちょっとメモ。

Last updated at Posted at 2018-08-11

screenshot_04.png

ムムム。1

HEAD detached from origin/master

なんか出てるけど、意味わからんからとりあえず無視。
あれ?右端にはいつもmasterと出ていたのに、今はsha1っぽい番号が…

でも今はそれよりも、早くgit pushして出かけないと。

screenshot_05.png

ぐは。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を試す。

screenshot_06.png

おお、右端の表示が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してみる。

screenshot_07.png

オッケー!!
やっと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>

でも、ちょっと分かってきたかも。
一旦checkout6して、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

ブランチ切れたので切り替えて7push8する。

~/.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'.

続いてpullpushしてみる。

~/.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を。できるか??

screenshot_09.png

よっしゃー!

ふう、今度こそ終わり。
最後にブランチを消しとこう。

~/.emacs.d ❯❯❯ git branch -d br_add_hoge
Deleted branch br_add_hoge (was 47361b3).

まあ、あれです。

気づいたときには10すでに悪いことは起きていて、後になってややこしいことになるのが常なのかもしれません。

盆休みにgitと戯れる日々はつづく。

参考

git pushできないときの対処法
detached HEAD から脱出する方法を git の内部構造から探る
Git概念の整理を試みる


  1. alias.s=status 

  2. 今回はGitHubの.emacs.d的なリポジトリだったので気軽に試せたけど、これが社内のだったらと思うと… 

  3. alias.gr=log --graph --date-order --all --pretty=format:'%h %Cred%d %Cgreen%ad %Cblue%cn %Creset%s' --date=short 

  4. 実際はgit pullは失敗するし、git fetch-fつけないと失敗したので。 

  5. alias.c=commit 

  6. alias.co=checkout 

  7. alias.b-sw=checkout 

  8. alias.b-push=push -u origin 

  9. alias.b-sw-master=checkout master 

  10. いやいや、今回は気づいていたにもかかわらず、スルーしようとしていたのか。 

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4