Я новичок в git, и я сделал boo boo. Я начал новую ветку (poly_attr), проверил ее, совершил некоторые коммиты. Пока я все еще был в этом отделении, я работал над несколькими другими вещами, которые должны были отправиться в другую ветку. Поэтому я совершил все, что должно быть в poly_attr, затем создал и проверил новую ветку (issue1), зафиксировал изменения и нажал обе ветви. Угадайте, что я забыл сделать? Перед созданием проблемы проверьте мастер. Итак, моя ветка issue1 отключилась от poly_attr. Хорошо, легко исправить, я думаю, проверить мастер и rebase issue1 для освоения. Нет, теперь у меня есть проблема 1 ветви poly_attr (удаленная) и одна из master (локальная). Как я могу удалить ветвь issue1 из poly_attr?git rebase и remote push
ответ
Перефразируя, вы начали с этим:
... - M5 - M6 <-- master, origin/master
То есть, были некоторые серии фиксаций (который я пронумерованный, Mn
). Вы сделали новое имя ветви poly_attr
указывая на то передай как кончик master
и сделал больше фиксаций, которые я маркировать Pn
:
... - M5 - M6 <-- master, origin/master
\
P0 - P1 <-- poly_attr
Затем вы сделали новую ветвь issue1
начиная с конца poly_attr
(не там, где вы намеревались начать), и сделал больше фиксаций:
... - M5 - M6 <-- master, origin/master
\
P0 - P1 <-- poly_attr
\
I0 - I1 <-- issue1
Тогда вы сделали git push
, что толкнул как poly_attr
и issue1
к удаленному (второй лох).
Удаленный теперь совершает I0
и I1
(с той же ветви этикетки на пульте дистанционного управления, как у вас есть на вашем местном), и вы не можете удалить их оттуда, если вы не можете войти туда и делать такие вещи, в том числе git gc
. Хуже того, при условии, что репо на origin
является общим, Другие люди могут иметь их сейчас. Это, в свою очередь, означает, как вы это исправите, зависит от того, насколько вы уверены, что у вас нет никого другого, насколько они влияют на кого-либо, у кого есть , имейте это и/или как отчаянно вы должны иметь окончательную историю ветвей » просто".
Это легко, в собственном репо, чтобы запустить git rebase -i master issue1
и выбрать переносится только совершает I0
и I1
или даже git rebase --onto master poly_attr issue1
переносить I0
и I1
без необходимости редактирования интерактивного Rebase вещи. В любом случае, если ваш конечный результат:
... - M5 - M6 <-- master, origin/master
|\
| P0 - P1 <-- poly_attr, origin/poly_attr
| \
| I0 - I1 <-- origin/issue1
\
I0' - I1' <-- issue1
Обратите внимание, что I
цепи фиксаций являются еще там, а остальные этикетки у них есть «удаленный филиал» origin/issue1
.
Если вы уверен никто не захватил issue1
с пульта дистанционного управления, и если у вас есть достаточное разрешение, вы можете git push -f origin issue1:issue1
после выполнения вашего перебазирования. Это пошлет над новыми коммитами I0'
и I1'
и сделайте пульт дистанционного управления его меткой issue1
, чтобы указать на I1'
, на кончике вашего нового филиала issue1
.Старые фиксации (I0
и I1
) все равно будут вокруг некоторого времени, но никто не увидит их, они не будут находиться в пути, и в конце концов они будут собираться в качестве мусора:
... - M5 - M6 <-- master, origin/master
|\
| P0 - P1 <-- poly_attr, origin/poly_attr
| \
| I0 - I1 [invisible and eventually gc'd]
\
I0' - I1' <-- issue1, origin/issue1
Даже если другие имеют, схватите его, если у вас есть достаточное разрешение и сила, вы можете заставить их принять ваши изменения. («Извините, ребята, если вы клонировали и получили номер 1, пожалуйста, обратите внимание, что я насильно переупал его, и вам придется выяснить, как исправить все, что вы делали, что зависело от него».)
Если вы не уверен или не имеет разрешения или что-то еще, вам придется жить с чем-то беспощадным. Вместо того, чтобы делать новые коммиты (In'
), вам просто нужно будет добавить к концу цепочки issue1
, совершает то, что отменяет действие каждого обязательства Pn
. Вы можете сделать это довольно просто, начиная с оригинальной (не нормированный) цепи:
... - M5 - M6 <-- master, origin/master
\
P0 - P1 <-- poly_attr
\
I0 - I1 <-- issue1
Просто используйте git revert
применить инверсию изменений, внесенных в серии P
:
$ git checkout issue1
$ git revert master..poly_attr
Это дает вам новая цепь:
... - M5 - M6 <-- master, origin/master
\
P0 - P1 <-- poly_attr
\
I0 - I1 - RP1 - RP0 <-- issue1
, где RP1
является обязательство, что возвращается (неудачи) P1
и RP0
- это фиксация, которая возвращает P0
. Если вы добавили файл в P1
, он будет удален в RP1
. Если вы удалили строку кода в P0
, она возвращается обратно в RP0
. Это означает, что конечный результат, файлов вы получаете при регистрации RP0
, выглядите так же, как если бы вы вносили изменения в I0
и I1
поверх фиксации M6
. История, конечно, выглядит совсем по-другому, и это хорошая идея, чтобы объяснить (в реверсе), почему это произошло. Но конечный результат тот же, и вы добавляете только новые коммиты в конец цепи In
, а это значит, что другие люди, у которых есть коммиты, могут немного поднять новый материал.
- 1. Git pull --rebase when push
- 2. Git Rebase - Rebase Shared Remote Onto Local, избегать слияния?
- 3. Git push prevent to remote
- 4. Git Push Remote Модифицированные файлы
- 5. Git push to remote directory?
- 6. Git Remote Push Fatal Error
- 7. git remote push не действует
- 8. git push patch to remote
- 9. Git Push to Remote Issue
- 10. Git add remote и push to
- 11. git rebase и git push: non-fast forward, зачем использовать?
- 12. Push новых коммитов после git rebase филиала
- 13. Циклы rebase-push для ветвей git
- 14. Git - push after feature branch rebase
- 15. Rebase делает push невозможным
- 16. Push to new git after rebase
- 17. git push to remote и потерять всю историю
- 18. Разница между git pull --rebase, git rebase и git merge
- 19. push to remote repo in git
- 20. git local, push to tfs remote repo
- 21. Svn2Git - Push Large GIT Repo To Remote
- 22. git push NOT current branch to remote
- 23. Проблема с git push remote за прокси
- 24. Git push to remote, не обновляющий файлы
- 25. GIT push not pushing commits to remote
- 26. git push to remote не принимается
- 27. Приложение push metor для онлайн-git remote
- 28. Push git alias to remote repo
- 29. Weird Git Rebase Ошибка
- 30. Git rebase в master и push без конфликтов
Wow, torek! Это лучший и самый описательный ответ, который, я думаю, я видел. Огромное спасибо. Вы поняли это правильно. К счастью, я не беспокоюсь о том, чтобы кто-то еще спускал ветви, и это я, поэтому я просто пошел вперед и толкнул изменения без тщательного изучения. Думаю, теперь я его контролирую. Еще раз спасибо. – user2659205