2015-12-25 6 views
0

Я был окутан в функцию, и было уже поздно. Я хотел сохранить свою работу в VCS. Я должен был использовать тайник, но я забыл об этом. Я не хотел совершать половину функции, поэтому решил создать новую локальную ветку и сохранить там свою работу. Так я сделал git branch newlocalbranch и git commit -m 'in the middle of task'; Но потом я понял, что когда я объединить этот локальный ветвь в свою официальную ветвь с выделенной функциональностью (с идентификатором задачи), в моей ветке свойств все равно появится недопустимое коммит. Теперь я хочу вернуться во времени до того момента, когда я нахожусь в своей ветке функций со всеми этими изменениями, которые я сделал. Затем я их спрятал и пошел домой.Как отменить git-ветку и git commit

+0

Ваш вопрос непонятен. Но git fast forward merge может помочь вам. http://stackoverflow.com/questions/2850369/why-does-git-fast-forward-merges-by-default –

ответ

1

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

Так что, если вы пришли master раньше, это будет команда:

git reset --soft master 

Это было бы для такой ситуации:

  master 
      ↓ 
* --- * --- * 
      \ 
       \ 
       * [in the middle of task] 
       ↑ 
     newlocalbranch 

Альтернатива, которая была бы продолжить работу над веткой до тех пор, пока вы не завершите работу, а затем внесите изменения в «посреди задачи», чтобы она содержала полное изменение и имела собственное имя. Для этого вы бы сделали git commit --amend --edit. Это в основном заменит, что «в середине задачи» совершит новый, содержащий все изменения от первоначальной фиксации и все, что вы добавили в индекс (обычно команда используется для фиксации последнего коммита, когда вы что-то забыли). Впоследствии вы могли бы сделать обычное ускоренное слияние обратно на мастер и это новое уточненное коммитирование было бы тем, что появилось в истории.

+0

Я собираюсь попробовать первый вариант в понедельник. – dKab

+0

спасибо. 'git reset --soft' работал. Хотя после этого мне пришлось проверить «master» branc h. Я ожидал, что «git reset --soft» сделает это для меня. – dKab

+0

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

0

После слияния вашего newlocalbranch в отделении объектов и завершения законченных работ, но до нажатия вы можете squash/fixup в одном. См. git guide on this

Смежные вопросы