<!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>
Я на самом деле когда-то продвинул с --force
и .git
репозиторий и ругался достижением Linus . В целом это создаст много проблем для других людей. Простой ответ, "Не делают этого".
я вижу, что другие дали рецепт для того, чтобы сделать так так или иначе, таким образом, я не повторю их здесь. Но вот подсказка для восстановления с ситуации после , Вы выставили исправленную фиксацию с - сила (или +master).
git reflog
для нахождения старой фиксации, которую Вы исправили (называют его old
, и мы назовем новую фиксацию Вами созданный путем исправления new
). old
и new
, записывая дерево new
, как git checkout new && git merge -s ours old
. git merge master
Затем люди, которые были достаточно неудачны основывать их работу над фиксацией Вы стертый путем исправления и принуждения нажатия, будут видеть, что получающееся слияние будет видеть, что Вы одобряете new
более чем [1 112]. Их более поздние слияния не будут видеть конфликты между [1 113] и new
, который следовал из Вашего исправления, таким образом, они не должны страдать.
Я должен был решить эту проблему с получением по запросу от удаленного repo и соглашения с конфликтами слияния, которые возникли, фиксация, и затем продвиньте. Но я чувствую, что существует лучший путь.
Короткий ответ: не продвигайте исправленный, соглашается на общественность repo.
ответ Long: Несколько команд Мерзавца, как git commit --amend
и git rebase
, на самом деле переписывают график истории. Это прекрасно, пока Вы не опубликовали свои изменения, но как только Вы делаете, Вы действительно не должны слоняться без дела с историей, потому что, если кто-то уже получил Ваши изменения, тогда когда они пытаются вытянуть снова, она могла бы перестать работать. Вместо того, чтобы исправить фиксацию, необходимо просто сделать новую фиксацию с изменениями.
Однако, если Вы действительно, действительно хотите продвинуть исправленную фиксацию, можно сделать так как это:
$ git push origin +master:master
продвижение +
знак вынудит нажатие произойти, даже если это не приведет к фиксации "ускоренной перемотки вперед". (Фиксация ускоренной перемотки вперед происходит, когда изменения, которые Вы продвигаете, прямой потомок из изменений уже в общественности repo.)
Вы видите функцию безопасности Мерзавца. Мерзавец отказывается обновлять удаленное ответвление с Вашим ответвлением, потому что главная фиксация Вашего ответвления не является прямым потомком текущей главной фиксации ответвления, к которому Вы продвигаете.
, Если бы это не имело место, то два человека, продвигающие в тот же репозиторий приблизительно в то же время, не знали бы, что была новая фиксация, входящая одновременно и кто бы ни продвинул в последний раз, потеряет работу предыдущего толкателя без любого из них понимающий это.
, Если Вы знаете, что Вы - единственный человек, продвигающий и Вы хотите продвинуть исправленную фиксацию или продвинуть фиксацию, что ветры поддерживают ответвление, можно 'вынудить' Мерзавца обновить удаленное ответвление при помощи эти -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].
Быстрая напыщенная речь: Тот факт, что никто не опубликовал здесь простой ответ, демонстрирует отчаянную враждебность пользователей, проявляемую Git CLI.
В любом случае, «очевидный» способ сделать это, при условии, что вы не пытались форсировать толчок, это сначала тянуть. Это вытягивает изменение, которое вы внесли (а значит, больше нет), чтобы оно у вас было снова.
После того, как вы разрешили все конфликты, вы можете отправить его снова.
Итак:
git pull
Если вы получаете ошибки при извлечении , возможно, что-то не так в конфигурации вашего локального репозитория (у меня была неправильная ссылка в разделе ветки .git / config).
И после
git push
Может быть, вы получите дополнительный коммит с темой, говорящей о "Trivial merge" ".