วิธีการแสดงรายการสาขาที่มีการมอบหมายที่ได้รับ?


1087

ฉันจะค้นหาคอมไพล์เพื่อค้นหาว่าสาขาใดมีคอมมิทที่กำหนดไว้ gitkมักจะแสดงรายการกิ่งไม้เว้นแต่จะมีจำนวนมากเกินไปซึ่งในกรณีนี้มันก็บอกว่า "มาก (38)" หรืออะไรทำนองนั้น ฉันจำเป็นต้องรู้รายการทั้งหมดหรืออย่างน้อยก็มีบางสาขาที่มีการส่งมอบ



คำถามที่เกี่ยวข้องสำหรับการกระทำที่เทียบเท่าต่อความคิดเห็น: stackoverflow.com/questions/16304574/…
UpAndAdam

คำตอบ:


1470

จากหน้าคู่มือสาขา git :

 git branch --contains <commit>

เฉพาะรายการสาขาที่มีการคอมมิทที่ระบุ (HEAD หากไม่ได้ระบุ) หมาย--listถึง


 git branch -r --contains <commit>

แสดงรายการสาขาการติดตามระยะไกลเช่นกัน (ตามที่กล่าวไว้ในคำตอบของผู้ใช้3941992ด้านล่าง) นั่นคือ "สาขาท้องถิ่นที่มีความสัมพันธ์โดยตรงกับสาขาระยะไกล"


ดูบทความนี้พร้อมคอมไพล์

--containsแท็กจะคิดออกว่าบางกระทำได้รับมาในเลยเข้าไปในสาขาของคุณ บางทีคุณอาจได้รับ SHA จากแพตช์ที่คุณคิดว่าคุณได้สมัครไว้หรือคุณแค่ต้องการตรวจสอบว่าคอมมิชชันสำหรับโปรเจ็กต์โอเพนซอร์สที่ช่วยลดการใช้หน่วยความจำลง 75%

$ git log -1 tests
commit d590f2ac0635ec0053c4a7377bd929943d475297
Author: Nick Quaranto <nick@quaran.to>
Date:   Wed Apr 1 20:38:59 2009 -0400

    Green all around, finally.

$ git branch --contains d590f2
  tests
* master

หมายเหตุ: ถ้ากระทำอยู่ในสาขาที่ห่างไกลติดตามเพิ่ม-aตัวเลือก
(ตามความเห็นของMichielB ด้านล่าง )

git branch -a --contains <commit>

ความคิดเห็นMatrixFrogที่แสดงเฉพาะสาขาที่มีการกระทำที่แน่นอน
หากคุณต้องการที่จะรู้ว่าสาขาใดที่มีการกระทำ "เทียบเท่า" (เช่นสาขาที่มีเชอร์รี่เลือกที่กระทำ) นั่นคือgit cherry:

เนื่องจากgit cherry เปรียบเทียบชุดการเปลี่ยนแปลงมากกว่าการส่งมอบรหัส (sha1)คุณสามารถใช้git cherryเพื่อดูว่าการส่งมอบที่คุณทำไว้ภายในเครื่องนั้นถูกนำไปใช้<upstream>ภายใต้รหัสยืนยันที่แตกต่างกันหรือไม่
ตัวอย่างเช่นสิ่งนี้จะเกิดขึ้นหากคุณป้อนแพทช์<upstream>ผ่านอีเมลแทนที่จะผลักหรือดึงคอมมิทโดยตรง

           __*__*__*__*__> <upstream>
          /
fork-point
          \__+__+__-__+__+__-__+__> <head>

(ที่นี่คำมั่นสัญญาที่ทำเครื่องหมาย ' -' จะไม่ปรากฏขึ้นgit cherryหมายความว่าพวกเขามีอยู่แล้ว<upstream>)


3
testsและmaster- masterเป็นสาขาปัจจุบันดังนั้นเครื่องหมายดอกจัน
blueyed

54
นี้แสดงให้เห็นเท่านั้นซึ่งประกอบด้วยสาขาที่แน่นอนกระทำ ถ้าคุณต้องการที่จะรู้ว่าสาขาใดที่มีการกระทำ "เทียบเท่า" (เช่นสาขาที่มีเชอร์รี่เลือกที่กระทำ) นั่นคือgit cherry: "เพราะเชอร์รี่คอมไพล์เปรียบเทียบการเปลี่ยนแปลงมากกว่าการกระทำรหัส (SHA1) คุณสามารถใช้ Git Cherry เพื่อค้นหา หากการกระทำที่คุณทำไว้ในเครื่องนั้นถูกนำไปใช้ <up สตรีม> ภายใต้รหัสการกระทำที่แตกต่างกันตัวอย่างเช่นกรณีนี้จะเกิดขึ้นหากคุณกำลังให้บริการแพทช์ <up สตรีม> ผ่านอีเมลแทนที่จะผลักหรือดึงคอมมิทโดยตรง " kernel.org/pub/software/scm/git/docs/git-cherry.html
MatrixFrog

62
เพิ่ม-aพารามิเตอร์เพื่อตรวจสอบสาขาระยะไกลด้วย
Raman

28
git tag --contains <commit>นอกจากนี้คุณยังสามารถทำ ดูการค้นหาแท็กทั้งหมดที่มีการส่งหรือไม่ .
แอนดรูมาร์แชลล์

5
สำหรับgit cherryส่วน @UpAndAdam ถามคำถามที่นี่: stackoverflow.com/questions/16304574/…อนิจจาคำถามที่ยังไม่ได้ตอบ (ยัง)
adeelx

22

คุณสามารถเรียกใช้:

git log <SHA1>..HEAD --ancestry-path --merges

จากความคิดเห็นของการกระทำครั้งสุดท้ายในผลลัพธ์คุณอาจพบชื่อสาขาเดิม

ตัวอย่าง:

       c---e---g--- feature
      /         \
-a---b---d---f---h---j--- master

git log e..master --ancestry-path --merges

commit h
Merge: g f
Author: Eugen Konkov <>
Date:   Sat Oct 1 00:54:18 2016 +0300

    Merge branch 'feature' into master

6
ดี! ฉันเคยgit log <SHA1>..master --ancestry-path --merges --oneline | tail -n1ได้สิ่งนี้มาในบรรทัดเดียว
James EJ

1
หากคุณต้องการใช้คำสั่ง git บริสุทธิ์คุณสามารถใช้:git log <SHA1>..master --ancestry-path --merges --oneline -1
Bartosz

หมายเหตุ: เมื่อการกระทำของคุณหม่าเป็นล่าสุดกระทำในต้นแบบ / สาขา foo (HEAD) ... คุณไม่สามารถทำA..Bช่วงกระทำการใช้งานเพียงแค่อย่าช่วงเช่นดังนั้น :: >git log HEAD --oneline -1 82c12a9 (HEAD, origin/remote-branch-name, origin/master, origin/dev, origin/HEAD, master, dev) commit message
Devin G Rhode

หากนี่ repo คอมไพล์เป็น submodule และคุณกำลังพยายามที่จะแก้ปัญหาหัวเดี่ยว ... แล้วคุณมีคำถามอย่างหนักของสาขาที่ต้องการ ... ในตัวอย่างก่อนหน้านี้ของฉันคุณสามารถจะพูดได้ว่าmasterเป็นที่ต้องการเสมอถ้ามันอยู่ในรายการนี้ . จากตรงนั้นมันชัดเจนน้อยกว่า คุณอาจจะลองอ่านและสาขาคอมไพล์จากไฟล์ git config -f .gitmodules submodule.src/foo/submodule.branch.gitmodules: นี่อาจเป็นทางเลือกที่ยืนยาว / pr คุณสามารถที่จะ cd repo git config submodule.src/foo/submodule.branchรากและเรียกใช้ นอกจากนี้คุณยังสามารถใช้ซูเปอร์โปรเจ็กต์สาขา git ปัจจุบันได้
Devin G Rhode

ขนาดเล็ก: git config submodule.src/foo/submodule.branchสามารถได้รับอิทธิพลจากการตั้งค่า git ที่หลากหลายรวมถึงไฟล์. gitconfig repo-local (ต้องวิ่งgit config --local include.path ./path/to/your/.gitconfig)
Devin G Rhode
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.