Я думаю, что вы ищете git cherry
. Это генерирует значения sha1 из тела коммита, а не использует git commit id для сравнения коммитов. Это делает его независимым от порядка фиксации. Вы используете его для поиска коммитов, которые, возможно, стоит добавить из одной ветви в другую.
Пример из дерева разработки msysGit может помочь. У нас есть старая ветка 'work / symlink', которая могла быть когда-то слита с веткой 'devel'. Итак:
pt111992@UKNML4132 /git (devel)
$ git cherry devel origin/work/symlink
+ 7fe3fde1d9b93472faeedb75bfd930825a5abe06
- aebecb0d31e4a546cf4d21d32e82cc852b6057bb
+ 1b467d086fd6601cd2feb34d59baf1e804f70acb
+ 3e735a0bfda6b91ae7cbb20c2c89818405c5bea9
+ d4db723c482ba4d2fd7539060834d231c35cdf53
Это говорит о том, что есть 5 коммитов интереса (которые мы также можем определить из вывода журнала):
$ git log --oneline devel..origin/work/symlink
d4db723 Place __stdcall between return value and function name
3e735a0 mingw.c: Use the O_BINARY flag to open files
1b467d0 Test for WIN32 instead of __MINGW32_
aebecb0 Define SNPRINTF_SIZE_CORR=1 for Microsoft Visual C++
7fe3fde Support UTF8<=>Unicode filename mapping
То, что коммиты присутствуют в 'work / symlink', а не в 'devel'. Вывод git cherry предполагает, что коммит aebecb0 уже применен к 'devel' (от ведущего минуса), но другие, возможно, стоит изучить. Мы можем проверить, что этот коммит присутствует только в рабочей ветке:
$ git branch --all --contains aebecb0
remotes/origin/work/symlink
но мы также можем найти идентификатор коммита, с которым он слился в ветку devel, с помощью поиска сообщения коммита, используя git log --crep
, чтобы увидеть, что это действительно было выбрано в devel.