Передать код в определенную ветку _after_ писать весь код (git)? - PullRequest
2 голосов
/ 03 апреля 2012

Скажем, я на ветке development, и я только что проводил рефакторинг в течение часа ... У меня не было плана, но через час я проделал большую работу над какой-то конкретной функцией. , скажем, работа над routing частью MVC. Есть ли способ передать этот код в выделенную ветку routing, которая может существовать или не существовать в проекте, без предварительной фиксации в ветке development? Я хочу, чтобы это было так, как будто в течение последнего часа я писал код в ветке routing.

Проблема с проверкой конкретной ветки во время сеанса взлома / рефакторинга заключается в том, что работа, которую вы собираетесь выполнить, непредсказуема. Таким образом, нет возможности узнать заранее «оформить ветку routing». Так что в итоге я просто держу все в development ветви. Но проблема с этой огромной ветвью состоит в том, что трудно работать с несколькими функциями одновременно, не ломая все. Похоже, что идеальным было бы cat >> прошедший час рефакторинга, который оказался всей маршрутизацией в новую / существующую ветку routing. Затем в течение следующего часа я могу сделать половину маршрутизации, половину базы данных, поэтому выбросим это в routing и database, ретроспективно.

Это возможно? Какие рабочие процессы вы используете, чтобы сделать это проще?

Ответы [ 5 ]

3 голосов
/ 03 апреля 2012

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

В вашем случае вы можете вносить только изменения «рефакторинга» («git add» нате) и сделать обязательство для развития ветви.После этого (с вашими изменениями маршрутизации, еще не зафиксированными и не зафиксированными), вы можете оформить заказ в ветке маршрутизации и зафиксировать там свои неустановленные изменения маршрутизации.

1 голос
/ 03 апреля 2012

Быстрый поток:

git stash
git checkout routing
git stash pop

В противном случае вы всегда можете зафиксировать свои изменения в локальной ветке:

git checkout -b wip #create branch wip
git add <some files>
git commit
git add <some files>
git commit
etc...

и после коммита вы можете перейти к другой ветви и cherry-pick к любой промежуточной фиксации, которую вы хотите, или checkout к конкретным файлам или каталогам:

git checkout routing
git cherry-pick 1bf56de #<- sha1 of one of your commits from your wip branch
git checkout 2cc54aa -- path/to/myFile #<- INDEX gets updated with this version of myFile
git checkout 2cc54aa -- whole/dir/
1 голос
/ 03 апреля 2012

Самый простой вариант - передать все, что вы сделали, на develop, сделать git checkout -b routing, чтобы у вас было 2 ветки (разработка и маршрутизация) в одной точке

затем git checkout develop && git reset --hard origin/develop, чтобы вернуть проявление туда, где оно было до того, как вы начали взламывать.

0 голосов
/ 03 апреля 2012

Ветвление в git - это дешево, поэтому ветвь рано и часто .

Перед началом любого кодирования ветвь 'development' во временную локальную ветвь.
Работайте там, как сказал MackeiaN, также часто совершайте коммиты, позже вы можете сдавить их.
Помните, что вы можете изменять свою историю локально столько раз, сколько захотите, прежде чем отправлять ее на общедоступный сервер.
Если вы не уверены в редактировании истории, вы можете снова выполнить ветвление, прежде чем делать это (если на коммиты ссылаются теги или ветки, вы не можете их потерять, у вас есть reflog в любом случае)

Когда вы заканчиваете сеанс кодирования, объединяете, перебазируете или переименовываете этовременная локальная ветвь, куда бы она ни направлялась.

Если вы не уверены в основных действиях Git, я рекомендую вам прочитать книгу "Pro Git" , особенно ее Глава "Git Branching" .

0 голосов
/ 03 апреля 2012

Просто отметьте нужную ветку и используйте флаг -m:

git checkout -m routing

Затем зафиксируйте ваши изменения.

...