2017-02-20 6 views
1

У меня около 10 коммитов на моей ветке, скажем, от 1 до 10. Я хочу, чтобы сквош фиксировал 4, 5 и 6 вместе, но оставил без изменений. Каждый учебник, который я нашел, начинается с текущего HEAD и идет назад с помощью git rebase -i HEAD ~ (x amount). Но как мне начать rebase при более раннем фиксации и указать диапазон, такой как git rebase -i 6 ... 4?Как сжечь сквош раньше коммита?

Спасибо

+0

Учебники таковы, потому что они должны быть. Rebase * копии * фиксируются, оставляя оригиналы нетронутыми (это должно быть, Git не может ничего изменить, как только они были зафиксированы). Следовательно, вы должны повторно скопировать все коммиты «после» исправления, потому что оригинальные неотправленные коммиты вернутся к их более ранним, оригинальным, нефиксированным коммитам. См. Ответ Джареда ниже. – torek

ответ

2

Просто сделайте интерактивный перебазироваться, сквош из адресной привязки коммитов вы хотите раздавленный или fixupped (устроился?)

git rebase HEAD~10

pick a4461d3 
pick d998164 
pick 0a1f6e1 
f 310ba9d 
f 60b7e01 
f 7baef60 
pick bb9a551 
pick badbad1 
pick fd9a10c 
pick 59ed66f 

# Rebase e7e1369..60b7e01 onto fd9a10c (10 command(s)) 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# x, exec = run command (the rest of the line) using shell 
# d, drop = remove commit 
# 
# These lines can be re-ordered; they are executed from top to bottom. 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# 
# However, if you remove everything, the rebase will be aborted. 
# 
# Note that empty commits are commented out 
+0

Не понимал, что я могу это сделать. Спасибо – thatDubstepSound

1

Ну, @jaredr уже ответил ваш вопрос. Переходя к второй части вопроса, GIT не предлагает таких команд (git rebase -i 4..6). и на самом деле это не должно! Представьте себе, сколько жонглирования GIT придется выполнять, если он начнет предлагать такую ​​команду (там, где он должен выполнять операцию над некоторыми коммитами и стеком других. Слияние должным образом добавляет к ней дополнительную сложность, поэтому оно переносит это задание самому пользователю, поскольку он/она - тот, кто лучше знает код.) Кроме того, он предоставляет механизмы помощи, такие как Git squash, где вы можете временно свалить свои коммиты и работать над чем-то другим.

+0

Я вроде понимаю, что вы имеете в виду. Однако в полностью линейной истории фиксации (при условии, что слияния не произошли), я до сих пор не вижу, как это добавит сложности. В конце концов, мы могли бы просто предположить, что все 3, 4, 5 произошло сразу, а затем перейти к 6 вправо? – thatDubstepSound

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