2015-07-09 6 views
1

Я хочу, чтобы apply a patch including its commit message, как я могу связать одну фиксацию и применить ее?Git bundle single commit?

Учитывая пример истории:

0a8b835 intel_pmc_ipc: Add Intel Apollo Lake PMC IPC driver 
0d44b41 tc1100-wmi: Delete an unnecessary check before the function call "kfree" 
b8830a4 dell-laptop: Fix allocating & freeing SMI buffer page 
2ec1e9e target: Bump core version to v5.0 
  • Скажем, я хотел связать 0d44b41 в 001.bundle, и применить его?
  • Скажите, что я хотел расслоить b8830a4 -through- 0d44b41 как 002.bundle, и применить его?

Примечание: я могу уже делать это с файлами патчей, но я также хочу включить commit mes автоматически.

Я пытался следовать git-scm doc on bundle с этой командой, которая выйдет из строя, как:

$ git bundle create 001.bundle 0d44b41^ 0d44b41 
fatal: Refusing to create empty bundle. 
+0

'git format-patch' – jthill

+0

... и' git am' применять патчи. – larsks

ответ

4

Я не уверен, почему вы хотите, специально ограничивать себя git bundle, но если вы сделать хочу, чтобы, принять к сведению эту формулировку в the documentation:

git-rev-list-args

список аргументов, приемлемый для git rev-parse и git rev-list (и содержащей именованный реф см , задающих ЛИТЕРАТУР ниже), который определяет конкретные объекты и ссылки на транспорт. ...

ОПРЕДЕЛЕНИЕ Лит

git bundle будет только ссылки пакетов, которые показаны на git show-ref: это включает в себя головки, теги и удаленные головы.

Теперь рассмотрим вашу команду:

$ git bundle create 001.bundle 0d44b41^ 0d44b41 

create 001.bundle указывает файл для создания. Остальная часть вашей командной строки, 0d44b41^ 0d44b41, является git-rev-list-args. Какую ссылку (название ветки или тега) вы использовали здесь?


Обратите внимание, что git format-patch включает сообщения фиксации (и автор), и с помощью git am применит фиксацию включая исходное сообщение (и автор, хотя вы будете коммиттером, если вы не сделать некоторые дополнительные работы установки) ,


Риторический вопрос, конечно: вы не использовали. Я не уверен, почему git bundle настолько настойчив, что вы можете легко привязать ссылку к необработанному SHA-1, сделать пакет, а затем удалить ссылку снова, не нарушая только что созданный пакет. Это позволит вам делать то, что вы пытаетесь сделать. Или, конечно, если есть имя (например, ветка или тег), указывающие на единую фиксацию, которую вы хотите связать, вы можете использовать это существующее имя напрямую.

+0

Огромное спасибо, я не знал, что 'git am' сделал то, что я хотел, так как [SO страница, с которой я получил git bundle') (http://stackoverflow.com/q/30503140/1695680) утверждал, что это было _the_way пакет commit. – ThorSummoner

+0

Это git, всегда есть, по крайней мере, дюжина способов сделать все, шесть из них ошибочны и еще три очень болезненные. :-) – torek