Aşağıdaki kabuk komutu istediğinizi yapmalıdır:
git log --all --not $(git rev-list --no-walk --exclude=refs/heads/mybranch --all)
Uyarılar
Teslim aldıysanız mybranch, yukarıdaki komut çalışmaz. Çünkü taahhütlere mybranchde ulaşılabilir HEAD, bu nedenle Git taahhütlerin benzersiz olduğunu düşünmez mybranch. İşaretlendiğinde çalışmasını sağlamak mybranchiçin aşağıdakiler için bir hariç tutma eklemeniz gerekir HEAD:
git log --all --not $(git rev-list --no-walk \
--exclude=refs/heads/mybranch \
--exclude=HEAD \
--all)
Ancak, gereken değil dışlamak HEADsürece mybranchteslim edilir aksi takdirde münhasır olmayan hareketin gösteren riski, mybranch.
Benzer şekilde, origin/mybranchyerel mybranchşubeye karşılık gelen bir uzak şubeniz varsa , bunu hariç tutmanız gerekir:
git log --all --not $(git rev-list --no-walk \
--exclude=refs/heads/mybranch \
--exclude=refs/remotes/origin/mybranch \
--all)
Ve uzak dal uzak depo için varsayılan dalsa (genellikle yalnızca doğru origin/master), hariç tutmanız gerekir origin/HEAD:
git log --all --not $(git rev-list --no-walk \
--exclude=refs/heads/mybranch \
--exclude=refs/remotes/origin/mybranch \
--exclude=refs/remotes/origin/HEAD \
--all)
Şube teslim alınmışsa ve uzak bir şube varsa ve uzak şube uzak depo için varsayılan değerse, çok şey hariç tutulur:
git log --all --not $(git rev-list --no-walk \
--exclude=refs/heads/mybranch \
--exclude=HEAD
--exclude=refs/remotes/origin/mybranch \
--exclude=refs/remotes/origin/HEAD \
--all)
açıklama
git rev-listKomutu verilir revizyonları yürür ve SHA1 tanımlayıcıları karşılaşılan dökümlerini düşük seviyeli (tesisat) komuttur. git logYalnızca SHA1'i göstermemesi dışında eşdeğer olarak düşünün; günlük mesajı yok, yazar adı yok, zaman damgası yok, "süslü" şeylerin hiçbiri yok.
--no-walkSeçenek, adından da anlaşılacağı gibi, önler git rev-listsoy zincirini yürürken. Bu nedenle git rev-list --no-walk mybranch, yalnızca bir SHA1 tanımlayıcısı yazdıracaktır: mybranchdalın ipucu tanımlayıcısı .
Bağımsız --exclude=refs/heads/mybranch --alldeğişkenler git rev-list, dışında her başvurudan başlamasını söyler refs/heads/mybranch.
Bu nedenle, Çalıştırdığınızda git rev-list --no-walk --exclude=refs/heads/mybranch --allGit, hariç her ref'nin ipucu işleminin SHA1 tanımlayıcısını yazdırır refs/heads/mybranch. Bu hareketin kaydedilmesini ve atalarının sen olan kaydedilmesini olan değil de-bunlar yok kaydedilmesini olan ilgi değil görmek istiyorum.
Diğer kaydedilmesini biz çıktısını toplamak böylece, görmek istiyorum olanlardır git rev-list --no-walk --exclude=refs/heads/mybranch --allve her şeyi ama bu teslimleri ve onların ataları göstermeye Git söyle.
--no-walkArgümanı büyük depolar için gerekli olan (ve küçük depolara basit bir optimizasyon): Bu, Git yazdırmak zorunda kalacak olmadan ve kabuk toplamak zorunda kalacak (ve bellekte saklamak) çok daha fazla gereğinden fazla tanımlayıcıları işlemek. Büyük bir depoda, toplanan taahhütlerin sayısı kabuğun komut satırı argüman sınırını kolayca aşabilir.
Git hatası mı?
Aşağıdakilerin çalışmasını beklerdim:
git log --all --not --exclude=refs/heads/mybranch --all
ama öyle değil. Sanırım bu Git'teki bir hata, ama belki kasıtlı.