2015-07-02 2 views
2

Допустим, у меня есть следующая история в моей мерзавца репо:мерзавец - получить изменение результата из нескольких, не следствие совершает

C (master) 
x (origin/master) 
B 
x 
A 
x 

A, B и C являются обязывает, что я заинтересован в, а х некоторые другие изменения (может быть более 1 фиксации). Я хотел бы знать, какое изменение результата было выполнено, совершая A, B и C, игнорируя любые другие изменения, которые были сделаны другими коммитами между ними.

Можно ли это сделать?

ответ

2

Вы можете перебазировать эти изменения, чтобы создать один из них совершают:

git rebase -i A^ // QWE^ means parent of QWE 

В интерактивном reabse вы можете изменить порядок фиксаций для C, B, A, чтобы быть на вершине. Вы также можете установить B и A для «сквоша» или «исправить», чтобы эти фиксации были видны как одна фиксация.

После этого, если вы хотите, чтобы увидеть изменения, сделанные фиксации A + B + C вы можете просто:

git log -p -1 A+B+C // -p means show diff, -1 means show just 1 commit 

Проблема заключается в том, что во время перебазирования вы, возможно, придется сделать несколько слияний.

2

Кажется, что вы хотите сделать обзор кода изменений в A-B-C.

Я рекомендую сначала заказать C в автономном состоянии HEAD, а не делать интерактивную перестановку.

git checkout --detach C 
git rebase -i A^ 

перебазироваться интерактивным редактор покажет вам что-то вроде этого

pick A 
pick x 
pick B 
pick x 
pick C 

Удалите x линии и пережать другие фиксации. Например.

pick A 
squash B 
squash C 

После перебазироваться закончил свои очки с головы до фиксации, которая содержит только изменения A-B-C.

Вы можете увидеть изменения, используя

git show HEAD 

Но имейте в виду, что вы могли бы получить конфликты, которые необходимо решить. Это может произойти, если, например, commit C зависит от изменений, внесенных в один из x, которые вы удалили. То же самое для фиксации «B».

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