Es ist etwas seltsam, aber ich kann eine ziemlich übliche Operation mit Git nicht ausführen. Im Grunde, was ich will, ist ein Feature-Zweig auschecken, nicht mit seinem Kopf, aber mit SHA-ID. Diese SHA Punkte zwischen Merges aus Master-Zweig.
Das Problem ist, dass ich nur den Master-Zweig ohne die Übertragungen aus dem Feature-Zweig erhalte. Derzeit versuche ich, eine Regression zu beheben, die früher im Master-Zweig eingeführt wurde.
Ich habe ein kleines Bash-Skript erstellt, um ein problematisches Repository wiederherzustellen, um es anschaulicher zu machen:
#!/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 ???
Im Grunde möchte ich nur den Zweig "patches" mit den Dateien 1-4 auschecken, aber ohne test5.txt.
Tun: git checkout [sha_where_test4.txt_entered]
... ergibt einfach einen Zweig mit test1,test3,test4, aber ohne test2.txt
Ein komplexeres Beispiel:
#!/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
Danke.