Git не будет отправлять последние коммиты на github

#git #github

Вопрос:

У меня есть локальный репозиторий с примерно 60 коммитами. Примерно на 20-м коммите я отправил проект в репозиторий github.

Моя локальная строка истории фиксации (git log —oneline):

 5cbd92c (HEAD -gt; master) Aflevering 70 fafeabb Aflevering 69 3ead1e4 Aflevering 67 37cb1b3 Aflevering 47 a8aab19 Aflevering 46 1cc0b4b Aflevering 44 4301621 Aflevering 43 353a626 Aflevering 34 2f42859 Aflevering 32 0027fc5 Aflevering 29 21eadaa Aflevering 28 be4226a (origin/master, master) Aflevering 20 6b6c5fe Aflevering 16 41c4426 Aflevering 12 0737348 Aflevering 10  

Я бы ожидал, что с

 git push origin master  

вся моя главная ветвь будет перенесена на github. Но вместо этого ответ таков

 Everything up to date  

и ничего не загружается на github.

Что я делаю не так?

С уважением,

Хьюберт

Редактировать: вот что git for-each-ref вываливается после некоторых поисков, od -bc чтобы разоблачить любых плохих персонажей:

 bash$ git for-each-ref | od -bc 0000000 065 143 142 144 071 062 143 143 144 070 143 071 141 067 070 143  5 c b d 9 2 c c d 8 c 9 a 7 8 c 0000020 061 146 143 060 146 070 061 062 067 070 141 066 070 063 063 145  1 f c 0 f 8 1 2 7 8 a 6 8 3 3 e 0000040 060 143 063 060 067 067 144 067 040 143 157 155 155 151 164 011  0 c 3 0 7 7 d 7 c o m m i t t 0000060 162 145 146 163 057 150 145 141 144 163 057 142 141 143 153 165  r e f s / h e a d s / b a c k u 0000100 160 012 142 145 064 062 062 066 141 063 062 064 071 066 064 144  p n b e 4 2 2 6 a 3 2 4 9 6 4 d 0000120 146 141 146 063 062 071 071 067 065 063 145 141 144 061 070 145  f a f 3 2 9 9 7 5 3 e a d 1 8 e 0000140 060 061 062 064 063 065 143 061 067 143 040 143 157 155 155 151  0 1 2 4 3 5 c 1 7 c c o m m i 0000160 164 011 162 145 146 163 057 150 145 141 144 163 057 155 141 163  t t r e f s / h e a d s / m a s 0000200 164 145 162 012 065 143 142 144 071 062 143 143 144 070 143 071  t e r n 5 c b d 9 2 c c d 8 c 9 0000220 141 067 070 143 061 146 143 060 146 070 061 062 067 070 141 066  a 7 8 c 1 f c 0 f 8 1 2 7 8 a 6 0000240 070 063 063 145 060 143 063 060 067 067 144 067 040 143 157 155  8 3 3 e 0 c 3 0 7 7 d 7 c o m 0000260 155 151 164 011 162 145 146 163 057 150 145 141 144 163 057 164  m i t t r e f s / h e a d s / t 0000300 145 163 164 012 142 145 064 062 062 066 141 063 062 064 071 066  e s t n b e 4 2 2 6 a 3 2 4 9 6 0000320 064 144 146 141 146 063 062 071 071 067 065 063 145 141 144 061  4 d f a f 3 2 9 9 7 5 3 e a d 1 0000340 070 145 060 061 062 064 063 065 143 061 067 143 040 143 157 155  8 e 0 1 2 4 3 5 c 1 7 c c o m 0000360 155 151 164 011 162 145 146 163 057 162 145 155 157 164 145 163  m i t t r e f s / r e m o t e s 0000400 057 157 162 151 147 151 156 057 155 141 163 164 145 162 012 065  / o r i g i n / m a s t e r n 5 0000420 143 142 144 071 062 143 143 144 070 143 071 141 067 070 143 061  c b d 9 2 c c d 8 c 9 a 7 8 c 1 0000440 146 143 060 146 070 061 062 067 070 141 066 070 063 063 145 060  f c 0 f 8 1 2 7 8 a 6 8 3 3 e 0 0000460 143 063 060 067 067 144 067 040 143 157 155 155 151 164 011 162  c 3 0 7 7 d 7 c o m m i t t r 0000500 145 146 163 057 162 145 155 157 164 145 163 057 157 162 151 147  e f s / r e m o t e s / o r i g 0000520 151 156 057 164 145 163 164 012 142 145 064 062 062 066 141 063  i n / t e s t n b e 4 2 2 6 a 3 0000540 062 064 071 066 064 144 146 141 146 063 062 071 071 067 065 063  2 4 9 6 4 d f a f 3 2 9 9 7 5 3 0000560 145 141 144 061 070 145 060 061 062 064 063 065 143 061 067 143  e a d 1 8 e 0 1 2 4 3 5 c 1 7 c 0000600 040 143 157 155 155 151 164 011 162 145 146 163 057 162 145 155  c o m m i t t r e f s / r e m 0000620 157 164 145 163 057 157 162 151 147 151 156 062 057 155 141 163  o t e s / o r i g i n 2 / m a s 0000640 164 145 162 012  t e r n 0000644  

Ответ №1:

Редактировать, в соответствии с (моим) вопросом редактировать на основе разговора … это наиболее странно, и вы, похоже, столкнулись с ошибкой в Git, так как git for-each-ref отображается только одна master ветвь, несмотря на ваш git log вывод, который показывает две master ветви.

Фактическое имя ветви сохраняется be4226a... , что объясняет git push результат. Но это ничего не объясняет HEAD -gt; master 5cbd92c... . Теперь у вас есть два имени ветвей ( backup и test ), которые помнят этот коммит. В зависимости от того, где и как проявляется ошибка, для устранения проблемы может сработать следующая последовательность действий:

 $ git checkout backup $ git branch -d master $ git branch master $ git checkout master $ git branch --set-upstream-to origin/master  

На этом этапе git log --oneline должно появиться HEAD -gt; master сообщение о фиксации 5cbd92c и git push origin master должно сработать.

[Оригинальный ответ ниже.]


Ваш вывод показывает две ветви с именами master :

 5cbd92c (HEAD -gt; master) Aflevering 70  

и:

 be4226a (origin/master, master) Aflevering 20  

Теперь невозможно иметь две ветви с одинаковым именем, 1 поэтому у одной из них должно быть какое-то другое имя,которое просто выглядит так master . Для git push того, чтобы вести себя так, как это делает, имени master должно быть второе, что еще с origin/master ; в текущей ветке, как указано HEAD -gt; master в фиксации 5cbd92c , должен быть тот, чье имя похоже, master но не на самом деле master (возможно, это maslt;invisible-charactergt;ter или что-то вдоль этих линий: если вы на системе Linux, использовать git branch | cat -v или git for-each-ref refs/heads | od -bc или аналогичная).


1 Если только вы каким-то образом не обнаружили ошибку в Git, что встречается редко, но не неслыханно.

Комментарии:

1. Согласно книге Pro Git, origin/master указывает на РУКОВОДИТЕЛЯ удаленного репозитория в последний раз, когда мое локальное репо подключалось к удаленному репо.

2. Да. Итак, у фиксации be4226a есть два имени: origin/master ( refs/remotes/origin/master чтобы выразить это полностью) и master ( refs/heads/master полностью). Проблема в другом названии, которое выглядит , но на самом деле таковым не master является, — это ветвь, в которой вы сейчас находитесь.

3. Но что мне теперь делать, чтобы можно было перенести всю ветку на Github?

4.Переименуйте или удалите одну из двух ветвей («настоящую» master , ту, которая указывает на фиксацию be4226a ). Затем переименуйте текущую ветвь master , чтобы она была реальной master . Тогда у вас будет только одна ветвь с видимым именем master , указывающая на правильную фиксацию, и git push она будет работать. Для этого вам нужно будет выяснить, каково фактическое имя, несмотря на явно невидимые символы в нем.

5. Вот почему я предложил использовать cat -v или od -bc на Linux. Если вы не работаете в Linux, найдите что-нибудь похожее для того, на чем вы работаете.