2009-10-28 2 views
6

Я сделал git commit, но я не нажал. И теперь я работаю над новым исправлением ошибок, которое не должно касаться тех же файлов, что и первая фиксация.Как я могу нажать одну Git-фиксацию без предыдущей?

Возможно ли, чтобы я зафиксировал это исправление ошибки И git push только это зафиксировать?

+7

Похоже, вы задали более 50 вопросов, но приняли ответы лишь на небольшую часть. Пожалуйста, подумайте о том, чтобы использовать функцию «accept», чтобы отметить ответ, который был наиболее полезен для вас. –

ответ

7

Все коммиты, ведущие к определенному фиксации, определяют, что нового совершает.

То есть, если у вас есть мастер → DEV → устранении ошибки, как показано на рисунке ниже:

master → dev → bugfix http://img.skitch.com/20091029-tbffrg53q73mdipiwcr3g2ywuh.png

вы можете нажать dev в одиночку, но не bugfix в одиночку, но определение bugfix включает dev, так dev не имеет смысла без bugfix

Однако, если вы строите это устранение ошибку, как ответвления новой функции, вы бы что-то, что выглядело примерно так:

feature branch http://img.skitch.com/20091029-t3w5qk3bhj3ftx1d9xnk32ibkb.png

Вы могли бы еще задним числом сделать (создать новую ветку из origin/master, вишневого выбрать изменение, а затем git reset --hard HEAD^ на вашей ветке развития, чтобы получить BUGFIX изменения отходящими от него).

После того, как это полное, вы можете переадресовать порт вашего Dev ветви с простым git rebase master, и это будет выглядеть следующим образом:

new master http://img.skitch.com/20091029-1ts3enwsmsr29imcu7tyk75ett.png

На практике, начиная исправление ошибок из ветки сделает этот вид вещи намного проще в целом.

6

Что вы можете сделать, это перенести предыдущую фиксацию на (временную) ветку, а вишню - выбрать новую фиксацию для мастера. Например:

# first commit your current work 
git branch temp_branch 
git reset --hard HEAD~2 
git cherry-pick temp_branch 
git push 

Затем temp_branch будет содержать ваши новые коммиты. Затем вы можете позже забрать свой предыдущий назад к мастеру:

git cherry-pick temp_branch^ 
git branch -D temp_branch 

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

0

просто сделайте еще один клон и оттолкните исправление ошибки.

+0

Чувак суровый, не так ли? – btelles

0

Наш магазин широко использует личные филиалы. В основном этот процесс будет идти, как это:

Учитывая, что вы в настоящее время на главной ветви

git checkout -b bug_fix_name_that_I_dont_want_to_commit 

выше создает филиал и проверяет его ... это где вы положили коммиты, что вы не готов нажать.

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

Когда вы будете готовы публиковать/толкать, что один совершить, просто сделать:

git push origin master 

и другие ваши коммиты не будет идти в хранилище происхождения.

Когда вы будете готовы включить «исправление ошибок» в основную ветвь, проверьте основную ветвь и выполните;

git merge bug_fix_name_that_I_dont_want_to_commit 

Я думаю, что это отвечает на вопрос, но если нет, просто дайте мне знать!

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