4 Stimmen

Git. Feature-Zweig zwischen Merge-Commits auschecken

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X