С Git, возможно ли повторно применить ревизию предка? - PullRequest
14 голосов
/ 21 июля 2010

Скажем, у меня есть версия A, которая была сделана давно и внесла желаемое изменение.

Затем, позже, у меня была ревизия B, которая внесла множество изменений во множество файлов, включая удаление изменений A.

Теперь, намного позже, я хочу повторно применить ревизию А. Есть ли хороший способ сделать это? Команды merge и cherry-pick, кажется, пропускают ревизии, которые являются предками, и я не вижу никаких флагов, чтобы игнорировать происхождение.

Всегда есть diff / apply, но действительно ли это лучший способ? Кажется, что это может быть «с потерями» (проходя через формат промежуточного патча) и может не позволить git использовать все инструменты, которые обычно находятся в его распоряжении ... но это неосведомленная догадка с моей стороны.

Ответы [ 2 ]

22 голосов
/ 22 июля 2010

git cherry-pick A будет делать именно то, что вы хотите.Он не смотрит на происхождение - он только смотрит, какие изменения уже были применены.

Вот пример:

git cherry-pick A
git cherry-pick A
git cherry-pick A

создаст только один новый коммит (не более).Вторая и третья команды не используются, поскольку изменения A уже применены.Однако

git cherry-pick A
git cherry-pick B
git cherry-pick A
git cherry-pick B

создаст четыре новых коммита.Первый и третий коммиты будут делать то же самое, в то время как второй и четвертый вернут первое и третье (даже если коммит B внес другие изменения, кроме возврата A.) Другими словами, это тоже самое, что1013 *

git cherry-pick A
git revert --no-edit HEAD
git revert --no-edit HEAD
git revert --no-edit HEAD

Надеюсь, это поможет.

0 голосов
/ 21 июля 2010

Вы можете использовать git checkout $ REVISION, чтобы вернуться к вашей ревизии (Commit).Затем вы должны создать новую ветку оттуда.

git.cmd branch YOURCOMMIT

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

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