Git bir şube ana Dalı bul
Bir ile aşağıdaki yerel depo var diyelim bu gibi ağaç katliamı:
master --> a
\
\
develop c --> d
\
\
feature f --> g --> h
usta ** 10, ve benim özelliği a new feature being prepared for 'develop'
this is the latest stable release code
, geliştirmek benim.
Benim uzaktan repo kanca kullanarak yapmak mümkün olmak istiyorum ne feature
iter f
taahhüt develop
BAŞ doğrudan decendant sürece reddetti. yani ağaç özelliği git rebase
d
oldu çünkü bu gibi görünüyor tamamlama.
master --> a
\
\
develop c --> d
\
\
feature f --> g --> h
Bu mümkün:
feature
ana şube tanımlamak?f
bir decendant ana şube yürütme tanımlamak?
Oradan ana Şube BAŞKANI ne olduğunu kontrol edin, ve eğer f
öncül, eğer özelliği rebased için ihtiyacı olup olmadığını belirlemek için ana Şube BAŞKANI eşleşip eşleşmediğini görmek istiyorum.
CEVAP
Uzak depo bir kopyası olduğunu varsayarakgeliştirmekşube (ilk açıklama açıklanır bir yerel depo, ama göründüğü gibi de var uzaktan) gerekir elde etmek için ne düşünmek istiyorum, ama bu yaklaşım biraz farklı gelen ne var öngörülüyordu.
Git tarihi iptalleri DAG dayanmaktadır. Şube (“) Genel sadece geçici başvuruları” belirli bir noktaya sürekli büyüyen taahhüt eder etiketler DAG. taahhüt Gibi dalları arasındaki ilişki zamanla değişebilir, ama tamamlar arasındaki ilişki değildir.
---o---1 foo
\
2---3---o bar
\
4
\
5---6 baz
baz
(eski sürüm) bar
dayanır gibi görünüyor? Ama eğer bar
kapatırsak ne?
---o---1 foo
\
2---3
\
4
\
5---6 baz
Şimdi baz
foo
dayanır gibi görünüyor. Ama baz
soy değişmedi, sadece bir etiket (ve elde edilen sarkan tamamlama) kaldırıldı. Ve eğer 4
yeni bir etiket eklersek ne olur?
---o---1 foo
\
2---3
\
4 quux
\
5---6 baz
Şimdi baz
quux
dayanır gibi görünüyor. Yine de, soy değişiklik yapmadı, etiketler değişti sadece.
Ancak, “6
taahhüt 3
? soyundan tamamlama” soran olsaydı (farz 3
6
tam SHA-1 tamamlama adları), o zaman cevap “evet”, ister bar
quux
etiketleri mevcut ya da değil.
Yani, “geçerli ipucu soyundan taahhüt itti . gibi sorular sorabilirsin ^em>geliştirmekşube?”, ama güvenilir bir şekilde talep edemez “itti taahhüt ana dal nedir?”.
Ne istediğinizi yakın görünüyor çoğunlukla güvenilir bir soru:
Tüm itti tamamlama (hariç geçerli ipucu . ataları için ^em>geliştirmekve onun ataları), o anki ipucu vargeliştirmekbir veli:
- en azından böyle bir taahhüt var mı?
- tüm bu işleyen tek ebeveynli tamamlar?
Uygulanan olabilir:
pushedrev=...
basename=develop
if ! baserev="$(git rev-parse --verify refs/heads/"$basename" 2>/dev/null)"; then
echo "'$basename' is missing, call for help!"
exit 1
fi
parents_of_children_of_base="$(
git rev-list --pretty=tformat:%P "$pushedrev" --not "$baserev" |
grep -F "$baserev"
)"
case ",$parents_of_children_of_base" in
,) echo "must descend from tip of '$basename'"
exit 1 ;;
,*\ *) echo "must not merge tip of '$basename' (rebase instead)"
exit 1 ;;
,*) exit 0 ;;
esac
Bu, belki de her şeyi yasak istediğin bazı kapsayacaktır.
Başvuru için, burada uzun bir örneği tarih:
A master
\
\ o-----J
\ / \
\ | o---K---L
\ |/
C--------------D develop
\ |\
F---G---H | F'--G'--H'
| |\
| | o---o---o---N
\ \ \ \
\ \ o---o---P
\ \
R---S
Yukarıdaki kod kullanılabilecek Reddet H
S
kabul ederkenH'
, J
, K
, ya N
ama olur da kabul L
P
(dahil birleştirir, ama onlar değil birleştirme ucugeliştirmek).
Ayrıca L
ve P
, reddetme değiştirmek ve soru sorabilirsiniz
Tüm itti tamamlama (hariç geçerli ipucu . ataları için ^em>geliştirmekve onun ataları):
- her iki ebeveyni ile işleyen var mı?
- en az bir tür değilse taahhüt geçerli ipucu vargeliştirmek(tek) üst?
pushedrev=...
basename=develop
if ! baserev="$(git rev-parse --verify refs/heads/"$basename" 2>/dev/null)"; then
echo "'$basename' is missing, call for help!"
exit 1
fi
parents_of_commits_beyond_base="$(
git rev-list --pretty=tformat:%P "$pushedrev" --not "$baserev" |
grep -v '^commit '
)"
case "$parents_of_commits_beyond_base" in
*\ *) echo "must not push merge commits (rebase instead)"
exit 1 ;;
*"$baserev"*) exit 0 ;;
*) echo "must descend from tip of '$basename'"
exit 1 ;;
esac
Silinmiş bir şube subversion geri dönm...
Şube "hata uzak git silerken: itm...
Mevcut şube tuşuna şube için Hiçbir de...
Nasıl Git bir Şube kapatacak?...
Bu sözler Gıt ne demek: Depo, şube, kl...