Это довольно странно, но я не могу выполнить довольно обычную операцию с git. В основном, я хочу, чтобы проверить ветвь функции, а не использовать ее голову, но используя SHA id. Этот SHA указывает между слияниями с главной ветвью.Git. Отверстие функции проверки между коммитами слияния
Проблема в том, что все, что я получаю, это просто ветвь мастера без фиксации от ветви функции. В настоящее время я пытаюсь исправить регрессию, введенную ранее в главной ветке.
Просто чтобы быть более описательным характером, я выстроил небольшой Баш скрипт, чтобы воссоздать хранилище проблемы:
#!/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
Спасибо.
Довольно аккуратный. Похоже на черную магию. Я просто пытаюсь понять, почему коммиты перемещались поверх патчей вместо tmp, как предлагалось --onto tmp. Согласно руководству git rebase [--onto] [], новая база tmp! Я что-то пропустил? –
MageSlayer
@mageslayer: commits не двигался поверх 'patches', но поверх' tmp'. 'newbase' действительно' tmp'. 'patches' заканчивается на правом коммите просто потому, что перед' rebase -onto' я перезагружаю его в нужном месте назначения, в котором я хотел, чтобы он находился. – VonC
@mageslayer: поскольку «ветка» в Git на самом деле является ярлыком на кончике графического пути, вы можете смело перемещать эту метку вокруг ... за исключением того, что вы уже опубликовали эту ветку ('push') что означало бы мир боли для любого, кто вытащил из вашей (новой) ветви: все будет снова слито. – VonC