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

 <!DOCTYPE html>
 <html>
  <head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <script type="text/javascript" src="http://cdn.jsdelivr.net/jquery.dirtyforms/2.0.0-beta00006/jquery.dirtyforms.min.js"></script>
  <script type="text/javascript">
    $(function() {
        $('#form_verify').dirtyForms();
    })
  </script>
  <title></title>
 <body>
<form id="form_verify" action="a.php" method="POST">
    Firt Name <input type="text">
    Last Name <input type="file">
    <input type="submit">   
</form>

601
задан Peter Mortensen 9 January 2017 в 19:36
поделиться

5 ответов

Я на самом деле когда-то продвинул с --force и .git репозиторий и ругался достижением Linus . В целом это создаст много проблем для других людей. Простой ответ, "Не делают этого".

я вижу, что другие дали рецепт для того, чтобы сделать так так или иначе, таким образом, я не повторю их здесь. Но вот подсказка для восстановления с ситуации после , Вы выставили исправленную фиксацию с - сила (или +master).

  1. Использование git reflog для нахождения старой фиксации, которую Вы исправили (называют его old, и мы назовем новую фиксацию Вами созданный путем исправления new).
  2. Создают слияние между old и new, записывая дерево new, как git checkout new && git merge -s ours old.
  3. Слияние, что Вашему ведущему устройству с git merge master
  4. Обновление Ваше ведущее устройство с результатом с [1 110]
  5. Выставляют результат.

Затем люди, которые были достаточно неудачны основывать их работу над фиксацией Вы стертый путем исправления и принуждения нажатия, будут видеть, что получающееся слияние будет видеть, что Вы одобряете new более чем [1 112]. Их более поздние слияния не будут видеть конфликты между [1 113] и new, который следовал из Вашего исправления, таким образом, они не должны страдать.

470
ответ дан João Pimentel Ferreira 10 January 2017 в 05:36
поделиться
  • 1
    Если Вы анализировали Принять заголовок, you' d должен правильно обработать 1) упорядочивание, 2) подстановочные знаки и 3) ' качество factor' который изменяет взвешенные значения при вычислении который вид ответа на возврат. Больше в w3.org/Protocols/rfc2616/rfc2616-sec14.html – Joe Liversedge 8 December 2012 в 22:31

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

1
ответ дан Spoike 9 January 2017 в 19:36
поделиться

Короткий ответ: не продвигайте исправленный, соглашается на общественность repo.

ответ Long: Несколько команд Мерзавца, как git commit --amend и git rebase, на самом деле переписывают график истории. Это прекрасно, пока Вы не опубликовали свои изменения, но как только Вы делаете, Вы действительно не должны слоняться без дела с историей, потому что, если кто-то уже получил Ваши изменения, тогда когда они пытаются вытянуть снова, она могла бы перестать работать. Вместо того, чтобы исправить фиксацию, необходимо просто сделать новую фиксацию с изменениями.

Однако, если Вы действительно, действительно хотите продвинуть исправленную фиксацию, можно сделать так как это:

$ git push origin +master:master

продвижение + знак вынудит нажатие произойти, даже если это не приведет к фиксации "ускоренной перемотки вперед". (Фиксация ускоренной перемотки вперед происходит, когда изменения, которые Вы продвигаете, прямой потомок из изменений уже в общественности repo.)

97
ответ дан mipadi 9 January 2017 в 19:36
поделиться

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

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

, Если Вы знаете, что Вы - единственный человек, продвигающий и Вы хотите продвинуть исправленную фиксацию или продвинуть фиксацию, что ветры поддерживают ответвление, можно 'вынудить' Мерзавца обновить удаленное ответвление при помощи эти -f переключатель.

git push -f origin master

Даже это не может работать, поскольку Мерзавец позволяет удаленным репозиториям отказываться от нажатий non-fastforward в дальнем конце при помощи переменной конфигурации receive.denynonfastforwards. Если это верно, причина отклонения будет похожа на это (отметьте 'удаленную отклоненную' часть):

 ! [remote rejected] master -> master (non-fast forward)

Для обхождения этого или необходимо изменить конфигурацию удаленного репозитория или как грязный взлом, можно удалить и воссоздать ответвление таким образом:

git push origin :master
git push origin master

В целом последний параметр к git push использование формат <local_ref>:<remote_ref>, где local_ref название ответвления по локальному репозиторию и remote_ref, является названием ответвления по удаленному репозиторию. Эта пара команды использует два shorthands. :master имеет пустой указатель local_ref, что означает, продвигают пустое ответвление удаленной стороне master, т.е. удаляют удаленное ответвление. Имя ответвления без [1 111] средства продвигает локальное ответвление с именем к удаленному ответвлению с тем же именем. master в этой ситуации коротко для [1 113].

253
ответ дан Peter Mortensen 9 January 2017 в 19:36
поделиться

Быстрая напыщенная речь: Тот факт, что никто не опубликовал здесь простой ответ, демонстрирует отчаянную враждебность пользователей, проявляемую Git CLI.

В любом случае, «очевидный» способ сделать это, при условии, что вы не пытались форсировать толчок, это сначала тянуть. Это вытягивает изменение, которое вы внесли (а значит, больше нет), чтобы оно у вас было снова.

После того, как вы разрешили все конфликты, вы можете отправить его снова.

Итак:

git pull

Если вы получаете ошибки при извлечении , возможно, что-то не так в конфигурации вашего локального репозитория (у меня была неправильная ссылка в разделе ветки .git / config).

И после

git push

Может быть, вы получите дополнительный коммит с темой, говорящей о "Trivial merge" ".

206
ответ дан 22 November 2019 в 21:55
поделиться
Другие вопросы по тегам:

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