2015-08-17 2 views
1

Я ищу простой способ перестроить фрагменты между патчами. Скажем, у меня есть некоторые репо с двумя последовательными фиксаций к нему:git rebase: движущиеся фрагменты между коммитами

git init 
echo -e "foo\n\nbar\n\nbaz" > file 
git add file 
git commit -m 'initial' 
sed -i 's/bar/boom/' file 
git commit -am 'first' 
sed -i 's/boom/qux/' file 
sed -i 's/baz/quux/' file 
git commit -am 'second' 

так моя история коммитов выглядит следующим образом:

first 

--- a/file 
+++ b/file 
@@ -1,5 +1,5 @@ 
foo 

-bar 
+boom 

baz 


    second 

--- a/file 
+++ b/file 
@@ -1,5 +1,5 @@ 
foo 

-boom 
+qux 

-baz 
+quux 

, но я хочу, чтобы посмотреть его, как это вместо:

first 

--- a/file 
+++ b/file 
@@ -1,5 +1,5 @@ 
foo 

-bar 
+boom 

quux 


    second 

--- a/file 
+++ b/file 
@@ -1,5 +1,5 @@ 
foo 

-boom 
+qux 

-baz 
+quux 

Есть ли простой способ сделать это, с rebase и различными командами с параметрами -p? Я думаю, что я мог бы сделать интерактивную перезагрузку, отредактировать первый комментарий, использовать git reset -p, чтобы удалить последнюю часть изменения, сохранить ее как временную фиксацию, завершить rebase, а затем сделать еще одну интерактивную rebase, чтобы выровнять временную фиксацию следующим образом , Это требует много размышлений и усилий, хотя в реальной ситуации, когда я хочу переставить два (или более) больших фиксации и вам нужно нести много фрагментов в обоих направлениях, возможно, пропуская некоторые промежуточные коммиты. Есть ли более простой способ сделать это, не создавая временных коммитов?

ответ

0

Если я не буду на quesiton неправильное ...

Вы можете создать отдельную ветку, сделать промежуточные коммиты, которые, затем объединить его обратно в использовании --squash, который сочетает в себе все берет на себя обязательство за одну фиксацию.

См Squash my last X commits together using Git

+0

Это не кажется проще, а я мог бы быть недопонимание, что вы имеете в виду. Выполнение интерактивной перестановки и смена 'pick' на' squash' - это не сложная часть. – Tgr