Как я могу нажать один коммит Git без более раннего? - PullRequest
6 голосов
/ 29 октября 2009

Я сделал git commit, но я не нажал. И сейчас я работаю над новым исправлением ошибки, которое не должно касаться тех же файлов, что и первый коммит.

Могу ли я зафиксировать это исправление И И git push только этот коммит?

Ответы [ 4 ]

7 голосов
/ 29 октября 2009

Все коммиты, ведущие к конкретному коммиту, определяют этот новый коммит.

То есть, если у вас есть master → dev → bugfix, как показано на рисунке ниже:

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

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

Однако, если вы создадите это исправление как ветку функций, у вас будет нечто, похожее на это:

функциональная ветвь http://img.skitch.com/20091029-t3w5qk3bhj3ftx1d9xnk32ibkb.png

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

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

новый мастер http://img.skitch.com/20091029-1ts3enwsmsr29imcu7tyk75ett.png

На практике запуск исправлений ошибок из ветки значительно облегчит подобные вещи.

6 голосов
/ 29 октября 2009

То, что вы можете сделать, это переместить предыдущий коммит в (временную) ветвь и выбрать свой новый коммит для мастера. Например:

# 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 голосов
/ 29 октября 2009

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

Учитывая, что вы в данный момент находитесь в главной ветке

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

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

0 голосов
/ 29 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...