Почему “нажатие мерзавца helloworld +master:master” вместо просто “нажатия мерзавца helloworld”?

Это было спрошено прежде здесь - но в основном, существует повышение ptime функция, которую можно использовать, или POSIX clock_gettime () функция, которая может служить в основном той же цели.

9
задан Community 23 May 2017 в 12:33
поделиться

1 ответ

Похоже, вы переписали свою историю (SHA-1, связанный с вашей фиксацией) в своей основной ветке.

Это означает, что вы больше не можете нажимать в режиме быстрой перемотки вперед.

мастер + заставляет толкнуть:
Имея необязательный ведущий +, вы можете указать git обновить ref, даже если обновление не является ускоренной перемоткой вперед.

Примечание: это может быть плохо, если кто-то уже клонировал ваш репозиторий, поскольку они больше не смогут просто извлечь вашу основную ветку без конфликта.
См. Также этот ответ SO .


Примечание: как упомянуто Джунио К. Хамано :

Существует два независимых механизма безопасности:

  • безопасность передающего конца может быть отменено с помощью " git push --force " и / или с помощью refspec с префиксом ' + ');

  • безопасность принимающей стороны может быть отменена переменная config receive.denynonfastworwards репозитория, в который вы отправляете.

Последнее значение по умолчанию «небезопасно», но если безопасность активирована в репозитории, принудительное действие со стороны отправителя не деактивирует его. IOW, обе стороны должны согласиться, чтобы разрешить небезопасное поведение.


Как упоминалось в Git FAQ , возможный курс действий:

Наиболее вероятная причина этого в том, что вам сначала нужно получить данные с пульта дистанционного управления. Вы можете увидеть, какие изменения произошли на удаленной стороне, сначала загрузив, а затем проверив журнал. Например,

 $ git fetch origin
 $ git log master..origin/master

перечислит все изменения удаленной стороны, которых нет на вашей стороне.
Если вам нужно графическое представление, используйте gitk --left-right master ... origin / master .
Стрелки слева - это изменения, которые вы хотите внести, стрелки справа - изменения на удаленной стороне.

Другое решение (что вы и сделали):

$ git push origin +branchname

Это приведет к принудительному обновлению. Если у вас нет разрешения, то иногда это сработает:

$ git push origin :branchname
$ git push origin +branchname

т.е. сначала удалите ветку удаленно (это часто разрешено), а затем повторно нажмите «новую» (или, возможно, перемотанную) ветку.

Будьте предупредил, что если перемотать ветки, у других могут возникнуть проблемы при вытаскивании.
Есть вероятность, что они объединятся в ветке, которую они получили, с новой, которую вы опубликовали, эффективно сохраняя изменения, от которых вы пытаетесь избавиться.
Однако плохие исправления будут иметь только их копии. По этой причине перемотка веток считается умеренно антиобщественной. Тем не менее, это часто бывает уместно.

22
ответ дан 4 December 2019 в 09:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: