ฉันจะค้นหาคอมไพล์เพื่อค้นหาว่าสาขาใดมีคอมมิทที่กำหนดไว้ gitk
มักจะแสดงรายการกิ่งไม้เว้นแต่จะมีจำนวนมากเกินไปซึ่งในกรณีนี้มันก็บอกว่า "มาก (38)" หรืออะไรทำนองนั้น ฉันจำเป็นต้องรู้รายการทั้งหมดหรืออย่างน้อยก็มีบางสาขาที่มีการส่งมอบ
ฉันจะค้นหาคอมไพล์เพื่อค้นหาว่าสาขาใดมีคอมมิทที่กำหนดไว้ gitk
มักจะแสดงรายการกิ่งไม้เว้นแต่จะมีจำนวนมากเกินไปซึ่งในกรณีนี้มันก็บอกว่า "มาก (38)" หรืออะไรทำนองนั้น ฉันจำเป็นต้องรู้รายการทั้งหมดหรืออย่างน้อยก็มีบางสาขาที่มีการส่งมอบ
คำตอบ:
จากหน้าคู่มือสาขา 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>
)
tests
และmaster
- master
เป็นสาขาปัจจุบันดังนั้นเครื่องหมายดอกจัน
git cherry
: "เพราะเชอร์รี่คอมไพล์เปรียบเทียบการเปลี่ยนแปลงมากกว่าการกระทำรหัส (SHA1) คุณสามารถใช้ Git Cherry เพื่อค้นหา หากการกระทำที่คุณทำไว้ในเครื่องนั้นถูกนำไปใช้ <up สตรีม> ภายใต้รหัสการกระทำที่แตกต่างกันตัวอย่างเช่นกรณีนี้จะเกิดขึ้นหากคุณกำลังให้บริการแพทช์ <up สตรีม> ผ่านอีเมลแทนที่จะผลักหรือดึงคอมมิทโดยตรง " kernel.org/pub/software/scm/git/docs/git-cherry.html
-a
พารามิเตอร์เพื่อตรวจสอบสาขาระยะไกลด้วย
git tag --contains <commit>
นอกจากนี้คุณยังสามารถทำ ดูการค้นหาแท็กทั้งหมดที่มีการส่งหรือไม่ .
git cherry
ส่วน @UpAndAdam ถามคำถามที่นี่: stackoverflow.com/questions/16304574/…อนิจจาคำถามที่ยังไม่ได้ตอบ (ยัง)
คุณสามารถเรียกใช้:
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
git log <SHA1>..master --ancestry-path --merges --oneline | tail -n1
ได้สิ่งนี้มาในบรรทัดเดียว
git log <SHA1>..master --ancestry-path --merges --oneline -1
A..B
ช่วงกระทำการใช้งานเพียงแค่อย่าช่วงเช่นดังนั้น :: >git log HEAD --oneline -1
82c12a9 (HEAD, origin/remote-branch-name, origin/master, origin/dev, origin/HEAD, master, dev) commit message
master
เป็นที่ต้องการเสมอถ้ามันอยู่ในรายการนี้ . จากตรงนั้นมันชัดเจนน้อยกว่า คุณอาจจะลองอ่านและสาขาคอมไพล์จากไฟล์ git config -f .gitmodules submodule.src/foo/submodule.branch
.gitmodules: นี่อาจเป็นทางเลือกที่ยืนยาว / pr คุณสามารถที่จะ cd repo git config submodule.src/foo/submodule.branch
รากและเรียกใช้ นอกจากนี้คุณยังสามารถใช้ซูเปอร์โปรเจ็กต์สาขา git ปัจจุบันได้
git config submodule.src/foo/submodule.branch
สามารถได้รับอิทธิพลจากการตั้งค่า git ที่หลากหลายรวมถึงไฟล์. gitconfig repo-local (ต้องวิ่งgit config --local include.path ./path/to/your/.gitconfig
)