Это немного странно, но я не могу выполнить довольно обычную операцию с git. По сути, я хочу проверить ветку функции, не используя ее заголовок, а используя идентификатор SHA. Этот SHA указывает между слияниями из основной ветви.
Проблема в том, что все, что я получаю, это просто ветка master без коммитов из ветки Feature.
В настоящее время я пытаюсь исправить регрессию, введенную ранее в основной ветке.
Для большей наглядности я создал небольшой скрипт bash, чтобы воссоздать проблемный репозиторий:
#!/bin/bash
rm -rf ./.git
git init
echo "test1" > test1.txt
git add test1.txt
git commit -m "test1" -a
git checkout -b patches master
echo "test2" > test2.txt
git add test2.txt
git commit -m "test2" -a
git checkout master
echo "test3" > test3.txt
git add test3.txt
git commit -m "test3" -a
echo "test4" > test4.txt
git add test4.txt
git commit -m "test4" -a
echo "test5" > test5.txt
git add test5.txt
git commit -m "test5" -a
git checkout patches
git merge master
#Now how to get a branch having all commits from patches + test3.txt + test4.txt - test5.txt ???
По сути, все, что мне нужно, это просто оформить ветки "заплатками" с файлами 1-4, но не включая test5.txt.
Выполнение:
git checkout [sha_where_test4.txt_entered]
... просто выдает ветку с test1, test3, test4, но исключая test2.txt
Более сложный пример:
#!/bin/bash
rm -rf ./.git
git init
echo "test1" > test1.txt
git add test1.txt
git commit -m "test1" -a
git checkout -b patches master
echo "test2" > test2.txt
git add test2.txt
git commit -m "test2" -a
git checkout master
echo "test3" > test3.txt
git add test3.txt
git commit -m "test3" -a
echo "test4" > test4.txt
git add test4.txt
git commit -m "test4" -a
echo "test5" > test5.txt
git add test5.txt
git commit -m "test5" -a
git checkout patches
git merge master
echo "test6" > test6.txt
git add test6.txt
git commit -m "test6" -a
#Now how to get a branch having all commits from patches + test3.txt + test4.txt - test5.txt ???
git log --topo-order | cat
# Now I need something to help me going back to history
# without manually calculating that patches~2 sha's
git checkout -b patches.tmp master~1
git merge patches~2
Спасибо.