Я работал над мастер-ветвью, модифицируя 10 файлов и добавляя 5 новых.
Я понял, что один из файлов не должен быть изменен, и я должен отключить его, поскольку исходная версия была правильной.
Я также решил продолжить свою работу в филиале.
Я сделал: git checkout -b newBranch
Затем я сделал git add
и git commit
всей моей работы в филиале.
Но я забыл, что мне пришлось отключить один из файлов!
Итак, теперь единственным решением, которое я могу придумать, является копирование исходного файла из главной ветви в мою ветку, а затем добавление и комманду для замены измененного файла.
Я думаю, что это должно сработать, но я думаю, будет странно объединять позже мое последнее завершение моей частной ветви с моей главной ветвью и доставить файл такой же, как тот, который находится на главном сервере.
Есть ли лучший способ справиться с этим беспорядком?Как удалить файл из фиксации частной ветки?
ответ
Пока вы не делитесь этой веткой, у вас есть несколько решений.
совершает --amend
Если вы только что совершили все ваши файлы, вы могли бы сделать
#Restore the file
git checkout HEAD -- my/file.txt
#Fix your commit
git add my/file.txt
git commit --amend
Это будет заново последним коммитом с файлом фиксированного
rebase -i
Есть еще один способ немного сложнее, но немного более гибкий. Даже если вы не используете его сегодня, это может спасти вас в другое время.
Вы можете раздавить свои коммиты.
Допустим, у вас есть
- один совершить где вы добавили все ваши файлы (назовем его
abc
) - один совершить где вы извлечь старую версию файла, который вы не хотите изменить (назовем это
def
)
Вы могли бы просто сделать git rebase -i HEAD^^
.Это откроет текстовый редактор с двумя вашими последних фиксаций, как
pick abc first commit message
pick def second commit message
заменить его на
pick abc first commit message
fixup def second commit message
затем сохранить и выйти, и мерзавец будет объединить эти две фиксации
Edit1: некоторые пояснения по 2-му решению по комментарию
git rebase -i HEAD^^
означает «пусть меня изменить свое дерево совершить, начиная с HEAD^^
» (А HEAD^^
означает «the parent of the parent of my current commit»)
Он будет затем открыть текстовый редактор со списком всех фиксаций, участвующих, и это позволит вам выбрать действие для каждого из этих коммитов. Список возможных действий представлен в нижней части файла.
pick
, действие по умолчанию, означает «не изменить фиксации. squash
означает„слияние этой фиксации и предыдущий“. fixup
является„слияние этой фиксации и предыдущий, и повторно использовать сообщение фиксации“
Во всяком случае, если вы не уверены в том, что вы делаете, вы можете пометить первоначальное обязательство перед выполнением такого рода манипуляций. Пример:
git tag safetyNet
git rebase -i HEAD^^
#damned, I screwed up
git checkout safetyNet
Edit2, чтобы ответить на другой комментарий
Если вы уже нажали на свою ветку на удаленный компьютер, и если вы единственный, кто ее использует, то это не имеет большого значения. Однако вам придется «заставить» толчок. Вот почему
Допустим, у вас есть следующие фиксаций:
A -- B
L newBranch | commit with the file you didn't want to modify
Так как вы толкали, это то, что у вас есть как на локальном компьютере и на удаленных РЕПО.
После фиксации его (с помощью раствора 1 или 2), вы будете иметь в вашем репо
A -- B2
\ L newBranch |fixed commit
\
\- B
L commit with the file you didn't want to modify, not on any branch anymore
Если вы пытаетесь git push origin newBranch
он потерпит неудачу, так как вы не можете fast forward от B
к B2
.
Так что вам нужно сделать git push -f origin newBranch
, чтобы рассказать git «Я знаю, что я делаю, идите в любом случае».
Чтение http://git-scm.com/book/en/Git-Branching-Remote-Branches может помочь прояснить эти понятия
- 1. Удалить файл из списка фиксации
- 2. Как переустановить из ветки с изменением фиксации?
- 3. Git: Как удалить файл из исторической фиксации?
- 4. Как узнать начало фиксации ветки?
- 5. Удалить файл как часть фиксации
- 6. Сколько можно удалить файл из ветки git?
- 7. github удалить один файл из истории фиксации
- 8. Как повторно применить фиксации поверх несвязанной ветки?
- 9. Удалить коммит из главной ветки в Git
- 10. Как удалить фиксации из битбакет
- 11. Как получить журналы фиксации удаленной расположенной ветки?
- 12. Git - удаление фиксации из ветки и продолжение прогресса
- 13. Временно удалить функцию из ветки Git
- 14. Как определить название ветки до первоначальной фиксации?
- 15. git удаление истории фиксации некоторых файлов из ветки
- 16. Как переместить все фиксации из ветки в другую?
- 17. Как скопировать фиксации из одной ветки в другую?
- 18. Удалить подмодуль Git из ветки
- 19. Как удалить все устаревшие ветки из Github?
- 20. Как удалить файлы из неправильно объединенной ветки?
- 21. Удалить зафиксированные файлы из фиксации
- 22. Как удалить удаленную ветку и ее историю фиксации из git?
- 23. Может ли слияние изменить историю фиксации ветки?
- 24. Включая текущее имя ветки в шаблоне фиксации
- 25. Как удалить ветки git zombie?
- 26. Удалить ветки в Bitbucket
- 27. Удалить файл из локальной фиксации. Невозможно использовать вариант с запасом
- 28. Почему Гит выгнал меня из ветки после неудачной фиксации?
- 29. Потерянная история фиксации ветки в octopus merge
- 30. Показать ветки, которые не содержат фиксации
'мерзавец Rebase ГОЛОВА ^^' это rebases в моей частной отрасли? Что это делает? Также я не уверен, что такое 'pick/fixup' – Jim
« Пока вы не делились этой ветвью », я нажал ее на удаленный, если это то, что вы имеете в виду. Но я единственный, кто работает над этим. – Jim
Поскольку вы работаете только с ней, вы в безопасности. Однако обратите внимание, что вам придется «git push -f» после этого – gturri