การดู Git ที่ไม่ได้ลงมือทำ


1752

ฉันจะดูการกระทำในท้องถิ่นที่ฉันทำไปแล้วยังไม่ได้ผลักไปยังที่เก็บระยะไกลได้อย่างไร บางครั้งgit statusจะพิมพ์ออกมาว่าสาขาของฉันคือ X มุ่งมั่นก่อนorigin/masterแต่ไม่เสมอไป

นี่เป็นข้อผิดพลาดเมื่อติดตั้ง Git หรือไม่


18
เริ่มต้นด้วย Git 2.5+ (Q2 2558) คำตอบที่แท้จริงgit log @{push}..คือ ดูว่าทางลัดใหม่@{push}(อ้างอิงสาขาการติดตามระยะไกลที่คุณกำลังกด) ในคำตอบของฉันด้านล่าง
VonC

59
@Torek - ยังมีงานง่าย ๆ อีกอย่างที่ Git ทำได้ยาก ทุกครั้งที่คำถาม Git แสดงด้วย upvotes หลายร้อยหรือหลายพันและมุมมองนับล้านคนควรคิดว่า: ว้าวเราจริง ๆ เวิร์กโฟลว์ที่ อนิจจา Git dev ได้ละเว้นขั้นตอนการตอบกลับในวงจรการพัฒนาดังนั้นจึงไม่ได้รวมความคิดเห็นไว้ แต่พวกเขาทำผิดพลาดซ้ำไปซ้ำมาเรื่อย ๆ สำหรับคำถามนี้git status --allควรปรากฏในปี 2010; หรือgit status -vควรให้เอาต์พุต verbose ที่มีข้อมูลพิเศษจริง ๆ
jww

4
ฉันไม่เห็นด้วยว่า "สถานะ git -v" ควรให้ข้อมูลนี้เพราะมีวัตถุประสงค์เพื่อให้สถานะเกี่ยวกับแผนผังการทำงานเนื่องจากเกี่ยวข้องกับสาขาที่เช็คเอาต์เท่านั้น อย่างไรก็ตามดูคำตอบด้านล่างเกี่ยวกับ "git branch -v" ซึ่งฉันเชื่อว่าควรเป็นคำตอบที่ได้รับการยอมรับ
JoelFan

13
คำถาม StackOverflow นี้โดยเฉพาะมีจำนวนคำตอบที่ถูกต้องสูงสุดที่ทุกงานยังไม่เข้าท่า
Pete Alvin

@ josh-buhler ขออภัยฉันลงคะแนนโดยไม่ตั้งใจ ... ในขณะที่ฉันพยายามคลิก 'STAR' พยายามลงคะแนนอีกครั้ง แต่ไม่ได้ผล!
RafiAlhamd

คำตอบ:


1827
git log origin/master..HEAD

คุณยังสามารถดู diff โดยใช้ไวยากรณ์เดียวกันได้

git diff origin/master..HEAD

3
มันทำเพื่อฉัน - ด้วยเหตุผลบางอย่างบันทึกการคอมไพล์ .. ด้วยตัวเองกำลังโยนข้อผิดพลาด ดูเหมือนว่าฉันยังมีปัญหาเกี่ยวกับวิธีการกำหนดค่าสาขาท้องถิ่นของฉัน - เมื่อฉันทำการเปลี่ยนแปลงที่ฉันพบที่นี่: wincent.com/blog/ ...... ปัญหาได้รับการแก้ไขและฉันสามารถใช้สถานะGitอีกครั้งเพื่อดูสิ่งที่ฉันต้องการ .
Josh Buhler

6
คู่บ้านคู่เมือง: มากฉันจึงทำgit config --global alias.ahead "log origin/master..HEAD --oneline"เพื่อที่ฉันจะได้รู้ว่าฉันอยู่ที่ไหน ขนมอื่น ๆ อีกมากมาย:for i in *; do echo $i && git ahead 2>/dev/null; done
เจมี่

15
git log --stat origin/master..HEADสำหรับสุดยอดความพิเศษเล็ก ๆ น้อย ๆ
Cory Danielson

141
นี่ไม่ใช่ทางออกที่ดีที่สุด Origin / master อาจไม่ได้เป็นสาขาต้นน้ำเสมอไป ทางออกที่ดีกว่าคือการใช้ @ {u} แทน "Origin / master" เพื่อระบุสาขาต้นน้ำ เนื่องจาก HEAD มีความหมายโดยปริยายคุณจึงสามารถละทิ้งสิ่งนั้นได้เช่นกัน ดูคำตอบของ @Ben Ling การเปลี่ยนแปลงขาออก: git log @ {u} .. การเปลี่ยนแปลงที่เข้ามา: git log .. @ {u}
PlagueHammer

12
@Nocturne ผมแค่อยากจะชี้ให้เห็นว่าเมื่อคำตอบนี้ถูกโพสต์ใน@{u}ไวยากรณ์ก็ไม่สามารถใช้ได้เลยก็กลายเป็นที่มีอยู่บน12 กุมภาพันธ์ 2010 นอกจากนี้@{u}จะไม่ทำงานหากสาขาท้องถิ่นไม่ได้รับการกำหนดค่าด้วยอัปสตรีม ท้ายที่สุด@{u}ขณะนี้ยังไม่มีการสนับสนุนการเติมแท็บ<remote>/<branch>ด้วยการเติมแท็บยังคงเป็นหนึ่งในวิธีที่เร็วที่สุดในการรับข้อมูลนี้และจะทำงานได้ไม่ว่าจะมีการกำหนดค่าอัปสตรีมหรือไม่

703

หากคุณต้องการเห็นการกระทำทั้งหมดในทุกสาขาที่ยังไม่ได้ดำเนินการคุณอาจมองหาสิ่งนี้:

git log --branches --not --remotes

และถ้าคุณต้องการเห็นการกระทำล่าสุดในแต่ละสาขาและชื่อสาขาสิ่งนี้:

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline

8
นี่มันเจ๋งมาก. ในสถานการณ์ที่เกี่ยวข้องฉันมีสองสาขาในประเทศที่มีสาขาต้นน้ำสองแห่งและมือข้างหนึ่งได้รับการรวมเข้าด้วยกัน ฉันอยากรู้ว่าคอมมิชชันใดที่ปลอดภัยในการรีบูต แต่ปกติgit log master..HEADจะใช้ไม่ได้เนื่องจากมีอัพสตรีมหลายครั้ง โพสต์นี้นำฉันไปgit log MyBranch --not --remotesสู่การแสดงความมุ่งมั่นทั้งหมดที่ไม่ได้ถูกผลักไปที่ต้นน้ำในสาขาเดียว
pavon

มันมีประโยชน์มากฉันใช้นามแฝงใน zsh config ขอบคุณ
Scotty C.

ฉันเข้าใจว่าคำสั่งที่สองของคุณกำลังแสดงรายการคำสั่งที่ยังไม่ได้ส่ง แต่จะแสดงเพียงหนึ่งรายการต่อสาขา
Stephane

--decorateแสดงให้เห็นถึงสาขาเช่นกัน --graphทำให้ชัดเจนยิ่งขึ้น
เรย์

โปรดทราบว่ารายการคำสั่งเหล่านี้ยอมรับว่าไม่ได้ถูกผลักในสาขาใด ๆ ตัวอย่าง: สมมติว่าคุณพัฒนาสาขาด้วยสาขา feat-NewThing คุณทำการเปลี่ยนแปลงในท้องถิ่นเป็น feat-NewThing (บันทึกมีการเปลี่ยนแปลง) จากนั้นคุณกด feat-newThing ไปที่สาขาระยะไกล (บันทึกว่างเปล่า) คุณผสานรวม feat-newThing เพื่อพัฒนาท้องถิ่น ถ้าสมมติว่ากรอไปข้างหน้าบันทึกจะยังคงไม่มีการเปลี่ยนแปลง
Patrick W

325

คุณสามารถแสดงความมุ่งมั่นทั้งหมดที่คุณมีในเครื่อง แต่ไม่ได้อัปสตรีมด้วย

git log @{u}..

@{u}หรือ@{upstream}หมายถึงสาขาต้นน้ำของสาขาปัจจุบัน (ดูgit rev-parse --helpหรือgit help revisionsเพื่อดูรายละเอียด)


17
สำหรับ Windows ฉันจำเป็นต้องใส่อาร์กิวเมนต์สุดท้ายในเครื่องหมายคำพูดเช่น: git log "@ {u} .. "
Jon Schneider

git log @{u}.. -p หนึ่งในตัวเลือกที่มีประโยชน์ที่สุดคือ-pซึ่งแสดงความแตกต่างที่แนะนำในการยืนยันแต่ละครั้ง
mQuiroz

อาจจะดีกว่าคอมไพล์ล็อก @ {} .. ผลักดันให้ดูคำตอบอื่น
Hans-Peter Störr

183

สิ่งนี้ใช้ได้กับฉัน:

git cherry -v 

ตามที่ระบุไว้ในGit: ดู unpushed กระทำหรือกระทำที่ไม่อยู่ในสาขาอื่น


21
ฉันคิดว่านี่น่าจะเป็นคำตอบหลักเพราะสิ่งนี้ให้รายละเอียดที่ชัดเจนมากกว่าการคอมเม้นท์แทนที่จะอ่านยากแตกต่างอย่างละเอียดในไฟล์ทั้งหมด !!
ViFI

1
git-cherry - "ค้นหาคำมั่นสัญญาที่ยังไม่ได้นำไปใช้กับต้นน้ำ" ดูเหมือนว่าจะให้สิ่งที่ OP ร้องขอ แต่มีเพียงหัวเรื่องที่กระทำแทนที่จะส่งข้อความทั้งหมด
Eido95

2
เป็นที่น่าสังเกตว่าสิ่งนี้จะบอกคุณได้เฉพาะในกรณีที่มีการยืนยันการชำระเงินในสาขาที่คุณได้ชำระเงิน มันจะไม่บอกคุณว่าคุณมีสาขาในประเทศ (ยังไม่ได้ชำระเงินในขณะนี้) โดยมีข้อผูกพันที่ไม่ได้ชำระ
Dave Yarwood

66

คุณสามารถทำได้ด้วยgit log:

git log origin..

สมมติว่าoriginเป็นชื่ออัปสตรีมของคุณโดยปล่อยชื่อการแก้ไขใด ๆ หลังจาก..บอกเป็นนัยHEADซึ่งจะแสดงรายการคอมมิทใหม่ที่ยังไม่ได้ผลัก


1
เมื่อใดก็ตามที่ผมเห็นคำตอบด้วยgit logและ "2 จุดไม่-3" ก็มักจะเตือนฉันของstackoverflow.com/questions/53569/... ;)
VonC

1
เพียงเพิ่มไปยังคำตอบ - หากไม่มีการตั้งค่าอัปสตรีมคำสั่งนี้จะส่งผลให้บอกว่าไม่มีการตั้งค่าอัปสตรีม รันgit branch --set-upstream master origin/<branch>เพื่อเซ็ตอัพสตรีมหากคุณต้องการใช้คำสั่งนี้เพื่อดูคอมมิชชันที่จัดเตรียมไว้
asyncwait

นี้จะเปรียบเทียบกับสาขาเริ่มต้นในกำเนิดไม่ใช่สาขาระยะไกลปัจจุบัน
greuze

43

คำตอบอื่น ๆ ทั้งหมดพูดถึง "ต้นน้ำ" (สาขาที่คุณดึงออกมา)
แต่สาขาในท้องถิ่นสามารถผลักดันไปยังสาขาที่แตกต่างจากสาขาที่ดึงมา

masterอาจไม่ส่งไปยังสาขาการติดตามระยะไกล " origin/master" ต้นน้ำสาขาอาจจะมีแต่ก็สามารถผลักดันสาขาการติดตามระยะไกลหรือแม้กระทั่ง เหล่านั้นถูกกำหนดโดยสำหรับสาขาปัจจุบันพร้อมกับค่า
masterorigin/masterorigin/xxxanotherUpstreamRepo/yyy
branch.*.pushremoteglobal remote.pushDefault

มันเป็นที่ที่ห่างไกลการติดตามสาขาซึ่งนับเมื่อแสวงหากระทำ unpushed: หนึ่งที่แทร็คbranch at the remoteที่สาขาในประเทศจะได้รับการผลักดันให้ สามารถอีกครั้งหรือแม้กระทั่ง
branch at the remoteorigin/xxxanotherUpstreamRepo/yyy

Git 2.5+ (Q2 2558) แนะนำทางลัดใหม่สำหรับสิ่งนั้น: <branch>@{push}

ดูกระทำ 29bc885 , กระทำ 3dbe9db , กระทำ adfe5d0 , กระทำ 48c5847 , กระทำ a1ad0eb , กระทำ e291c75 , กระทำ 979cb24 , กระทำ 1ca41a1 , กระทำ 3a429d0 , กระทำ a9f9f8c , กระทำ 8770e6f , กระทำ da66b27 , กระทำ f052154 , กระทำ 9e3751d , กระทำ ee2499f [ทั้งหมดจาก 21 พฤษภาคม 2015] และกระทำ e41bf35 [1 พฤษภาคม 2015] โดยเจฟฟ์คิง (peff )
(ผสานโดยJunio ​​C Hamano - gitster-ในการกระทำ c4a8354 , 5 มิถุนายน 2015)

Commit adfe5d0 อธิบาย:

sha1_name: ใช้@{push}ชวเลข

ในเวิร์กโฟลว์รูปสามเหลี่ยมแต่ละสาขาอาจมีจุดสนใจที่แตกต่างกันสองแบบ: @{upstream}โดยปกติแล้วคุณจะดึงจากและปลายทางที่ปกติคุณจะกด ไม่มีการจดชวเลขสำหรับหลัง แต่มีประโยชน์ที่จะมี

ตัวอย่างเช่นคุณอาจต้องการทราบว่าคุณยังไม่ได้ทำอะไรผลักดัน :

git log @{push}..

หรือเป็นตัวอย่างที่ซับซ้อนยิ่งขึ้นลองจินตนาการว่าโดยปกติคุณจะดึงการเปลี่ยนแปลงจากorigin/master(ซึ่งคุณตั้งไว้เป็นของคุณ@{upstream}) และผลักดันการเปลี่ยนแปลงไปสู่ทางแยกส่วนตัวของคุณ (เช่นตามmyfork/topic)
คุณสามารถผลักดันให้แยกจากเครื่องหลายเครื่องกำหนดให้คุณรวมการเปลี่ยนแปลงจากปลายทางการผลักดันแทนที่จะเป็นอัปสตรี
ด้วยแพตช์นี้คุณสามารถทำได้:

git rebase @{push}

แทนที่จะพิมพ์ชื่อเต็ม

Commit 29bc885เพิ่ม:

for-each-ref: ยอมรับ%(push)รูปแบบ ""

เช่นเดียวกับที่เรามี " %(upstream)" เพื่อรายงาน " @{upstream}" สำหรับการอ้างอิงแต่ละครั้งโปรแกรมแก้ไขนี้จะเพิ่ม " %(push)" เพื่อจับคู่ " @{push}"
รองรับการปรับเปลี่ยนรูปแบบการติดตามเดียวกันกับอัปสตรีม (เพราะคุณอาจต้องการทราบเช่นสาขาใดที่มีความมุ่งมั่นที่จะผลักดัน )

หากคุณต้องการดูจำนวนสาขาที่สาขาของคุณอยู่ข้างหน้า / หลังเปรียบเทียบกับสาขาที่คุณกำลังผลักดัน:

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads

42

นามแฝงคอมไพล์ที่มีประโยชน์สำหรับการค้นหาความมุ่งมั่น unpushed ในสาขาปัจจุบัน :

alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline

สิ่งนี้โดยพื้นฐานแล้วทำอะไร:

git log origin/branch..branch

แต่ยังกำหนดชื่อสาขาปัจจุบัน


8
นี่มันเจ๋งมาก! สำหรับผู้ที่ไม่คุ้นเคยกับนามแฝงให้เพิ่มพวกเขาไปยังไฟล์ ~ / .gitconfig ของคุณในส่วน [alias]
Gary Haran

1
คัดลอก / วางใน bash ไม่ทำงาน แต่สคริปต์ค่อนข้างมีประโยชน์และเข้าใจได้ง่าย
greuze

นี่ไม่ใช่นามแฝงทุบตีเนื่องจาก @GaryHaran ชี้ให้เห็น มีคำสั่ง git สำหรับเพิ่มนามแฝงเช่นกัน: git alias <alias-name> <command>ในกรณีนี้คำสั่งควรล้อมรอบด้วยเครื่องหมายอัญประกาศเดี่ยวเพื่อหลีกเลี่ยงอักขระพิเศษจากเชลล์
Dag Høidahl

4
นั่นคือ:git config --global alias.unpushed '!GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline'
Ricky Levi

ที่ดูเหมือนว่าจะเป็นเช่นเดียวกับการเข้าสู่ระบบคอมไพล์ @ {u} .. แม้ว่า - ดูคำตอบอื่น
Hans-Peter Störr

35

คุณสามารถลอง ....

gitk

ฉันรู้ว่ามันไม่ใช่ตัวเลือกบรรทัดคำสั่งล้วน แต่ถ้าคุณติดตั้งไว้และอยู่ในระบบ GUI มันเป็นวิธีที่ดีในการดูสิ่งที่คุณกำลังมองหารวมทั้งอีกมากมาย

(อันที่จริงฉันแปลกใจมากที่ไม่มีใครพูดถึงมัน)


3
gitk --allสำหรับดูสาขาทั้งหมด
เรย์

3
tigเป็นทางเลือก ncurses
เรย์

@ justin-ohms ยอดเยี่ยมgitkมาก! ไม่เคยรู้เรื่องนี้มาก่อน! มีประโยชน์ในการเรียกดูการเปลี่ยนแปลงใน UI ที่ดี
RafiAlhamd

@ray tigมีประโยชน์มากที่สุดในสถานการณ์ 'เทอร์มินัลเท่านั้น' ซึ่งคุณไม่สามารถเข้าถึง GUI เดสก์ท็อปได้ เรียนรู้เกี่ยวกับมันเป็นครั้งแรก! สิ่งที่น่าสนใจ: tigกลับมาแล้วgit!
RafiAlhamd

30

git branch -v จะแสดงสำหรับแต่ละสาขาในพื้นที่ไม่ว่าจะเป็น "ไปข้างหน้า" หรือไม่


2
ใช่ในกรณีที่มีการคอมมิชชัน unpushed ในสาขาdevelบรรทัดที่เกี่ยวข้องจะเป็น* devel 8a12fc0 [ahead 1] commit msg( *จะเป็นเฉพาะในบรรทัดที่สอดคล้องกับสาขาที่เช็คเอาต์) ahead 1หมายถึง "ล่วงหน้าโดยหนึ่งกระทำ" คือมีหนึ่งไม่ได้ตั้งใจกระทำ
Aurelien

2
ไม่ใช่git branch -vvเหรอ cf เลย docs:“ ถ้าให้สองครั้งให้พิมพ์ชื่อของ upstream branch เช่นกัน (ดู git remote show <remote>)
เฮนรี่สกปรก

นี่ไม่ได้เกี่ยวกับการพิมพ์ชื่อของสาขาต้นน้ำ แต่เป็นเพียงการพิมพ์behindและ / หรือaheadสำหรับแต่ละสาขาในท้องถิ่นซึ่งเพียงพอที่จะแก้ปัญหาของ OP (ตรวจจับการกระทำที่ไม่ได้ตั้งใจ) git branch -vก็เพียงพอแล้วลองทดสอบอีกครั้งกับ Git 2.16.2 :)
Aurelien

-vv มีประโยชน์เพราะมันแสดงให้เห็นถึงความแตกต่างระหว่างกิ่งที่ทันสมัยกับรีโมทและที่ไม่ได้ถูกผลักเลย (มีเพียงหนึ่ง -v พวกเขาจะปรากฏขึ้นเหมือนกันบนหน้าจอ)
RM

30

ก่อนหน้านี้ฉันมีความมุ่งมั่นที่จะทำไม่ได้ผลักไปที่สาขาใด ๆ หรือระยะไกลหรือในท้องถิ่น เพียงแค่ความมุ่งมั่น ไม่มีคำตอบอื่นใดที่เหมาะกับฉัน แต่ใช้กับ:

git reflog

ที่นั่นฉันพบความมุ่งมั่นของฉัน


ตามที่ระบุไว้ในลิงค์นี้git-scm.com/docs/git-reflogบันทึกการอ้างอิงหรือ "reflogs" บันทึกเมื่อเคล็ดลับของสาขาและการอ้างอิงอื่น ๆ ได้รับการปรับปรุงในพื้นที่เก็บข้อมูลท้องถิ่น ในกรณีของฉันฉันโคลน repo สร้างสาขาใหม่ลบสาขาสร้างใหม่สร้างคอมมิชชันและเปลี่ยนคอมมิชชัน ขั้นตอนเหล่านี้ทั้งหมดที่ recored เป็น HEAD @ {0}: commit (แก้ไข): .. HEAD @ {1}: commit: ... HEAD @ {2}: checkoutout: ย้ายจาก ... เป็น ... HEAD @ { 3}: checkedout: ย้ายจาก ... เป็น ... HEAD @ {4}: clone: ​​จาก #sorry สำหรับรูปแบบดังนั้นไม่อนุญาตให้มีการแสดงความคิดเห็นหลายบรรทัดใน
ความเร็ว

สิ่งนี้รวมถึงการคอมมิทดั้งเดิมด้วยเช่นกันทางออกที่ดีที่สุดคือการใช้คำสั่งจาก @PlagueHammer ( stackoverflow.com/a/2016954/624048 )
Lincoln

20

ฉันใช้นามแฝงต่อไปนี้เพื่อรับรายการของไฟล์ (และสถานะ) ที่ถูกคอมมิต แต่ยังไม่ได้ถูกผลัก (สำหรับสาขาปัจจุบัน)

git config --global alias.unpushed \
"diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"

จากนั้นทำ:

git unpushed

ดูน่าสนใจ แต่ $ (git name-rev - HEAD-only-HEAD) เป็น "undefined" ในกรณีของฉัน
vak

13

ฉันเชื่อว่าวิธีการทั่วไปในการทำเช่นนี้คือการทำสิ่งที่ชอบ:

git cherry --abbrev=7 -v @{upstream}

อย่างไรก็ตามโดยส่วนตัวแล้วฉันชอบที่จะวิ่ง:

git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..

ซึ่งแสดงการกระทำจากสาขาทั้งหมดที่ไม่ได้รวมอัปสตรีมพร้อมกับการคอมมิทล่าสุดในอัพสตรีม (ซึ่งแสดงเป็นรูทโหนดสำหรับการคอมมิทอื่น ๆ ทั้งหมด) ฉันใช้มันบ่อยครั้งจนฉันสร้างนามแฝงnoupสำหรับมัน

git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'

11

ฉันขอแนะนำให้คุณไปที่สคริปต์https://github.com/badele/gitcheckฉันได้เขียนสคริปต์นี้สำหรับการตรวจสอบครั้งเดียวผ่านที่เก็บคอมไพล์ของคุณทั้งหมดและมันแสดงว่าใครยังไม่ได้รับมอบหมายและใครยังไม่ได้ผลัก / ดึง

นี่คือผลตัวอย่าง ป้อนคำอธิบายรูปภาพที่นี่


1
คุณช่วยอธิบายวิธีทำให้ปลั๊กอินนี้ทำงานบนเครื่อง Windows ได้ไหม ฉันพยายามเรียกใช้ pip แต่คำสั่งหายไปในบรรทัดคำสั่ง ฉันติดตั้ง Python แล้ว แต่ฉันไม่แน่ใจว่าเพียงพอหรือไม่
Konrad Szałwiński

@ KonradSzałwińskiฉันไม่ได้ใช้เครื่อง windows แต่ในหัวข้อนี้ ( stackoverflow.com/questions/4750806/… ) ผู้ใช้ดูเหมือนจะตอบคำถามของคุณ :) แต่ฉันยังไม่ได้ทดสอบใน windows และฉันไม่แน่ใจว่าทำงานได้หรือไม่
Bruno Adelé

@ KonradSzałwińskiผู้สนับสนุน ChristianTremblay github ได้เพิ่มการสนับสนุน windows ตอนนี้ gitcheck ทำงานบน windows คุณสามารถดาวน์โหลดได้ที่github.com/badele/gitcheck
Bruno Adelé

ตอนนี้คุณสามารถใช้ gitcheck โดยตรงจาก container docker (พร้อมไฟล์ของคุณในโฮสต์ของคุณ) สำหรับข้อมูลเพิ่มเติมดูโครงการ gitcheck github
Bruno Adelé

ขอบคุณสำหรับการโพสต์สิ่งนี้ดูเหมือนว่ามีประโยชน์จริงๆ ฉันพยายามติดตั้ง แต่หลังจากการติดตั้งฉันไม่พบตำแหน่งของสคริปต์เพื่อเรียกใช้ $ pip ติดตั้ง git + git: //github.com/badele/gitcheck.git กำลังรวบรวม git + git: //github.com/badele/gitcheck.git การโคลน git: //github.com/badele/gitcheck.git ไปที่ c : \ users \ u6041501 \ appdata \ local \ temp \ pip-bxt472z_-build การติดตั้งแพ็กเกจที่รวบรวมไว้: gitcheck การเรียกใช้ setup.py ติดตั้งสำหรับ gitcheck: เริ่มทำงานกำลังติดตั้ง install.py ติดตั้งสำหรับ gitcheck: เสร็จสิ้นด้วยสถานะ 'เสร็จสิ้น' ติดตั้งสำเร็จ gitcheck-0.3 .22
ลอเรนฟิทช์


9

มันไม่ใช่ข้อผิดพลาด สิ่งที่คุณอาจเห็นคือสถานะ git หลังจากการผสานอัตโนมัติที่ล้มเหลวโดยมีการดึงข้อมูลการเปลี่ยนแปลงจากระยะไกล แต่ยังไม่รวม

ในการดูข้อผูกพันระหว่าง repo ในพื้นที่และระยะไกล

git fetch

ปลอดภัย 100% และจะไม่ลอกเลียนแบบสำเนาการทำงานของคุณ หากมีการเปลี่ยนแปลงgit statuswil X commits ahead of origin/masterแสดง

ตอนนี้คุณสามารถแสดงบันทึกการกระทำที่อยู่ในรีโมท แต่ไม่ใช่ในเครื่อง:

git log HEAD..origin

8

สิ่งนี้ใช้ได้ผลดีกว่าสำหรับฉัน:

git log --oneline @{upstream}..

หรือ:

git log --oneline origin/(remotebranch)..

2
สำหรับคนอื่นที่สงสัยว่า@{upstream}เป็นตัวอักษร ( upstreamเป็นคำวิเศษ) ในขณะที่remotebranchเป็นเพียงชื่อของสาขาของคุณ
Steve Bennett

7

มีเครื่องมือชื่อunpushedที่สแกน repos Git, Mercurial และ Subversion ทั้งหมดในไดเร็กทอรีการทำงานที่ระบุและแสดงรายการของไฟล์ที่ถูกคอมมิตและคอมมิชต์ unpushed การติดตั้งง่ายภายใต้ Linux:

$ easy_install --user unpushed

หรือ

$ sudo easy_install unpushed

เพื่อติดตั้งทั้งระบบ

การใช้งานก็ง่ายเช่นกัน:

$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)

ดูunpushed --helpหรือคำอธิบายอย่างเป็นทางการสำหรับข้อมูลเพิ่มเติม นอกจากนี้ยังมีสคริปต์ cronjob unpushed-notifyสำหรับการแจ้งเตือนบนหน้าจอเกี่ยวกับการเปลี่ยนแปลงที่ไม่ได้รับอนุญาตและไม่ได้รับการชำระ


5

ในการแสดงรายการที่ไม่ได้กระทำทั้งหมดในทุกสาขาคุณสามารถใช้คำสั่งนี้

 git log --branches  @{u}..

4

ที่คล้ายกัน: วิธีดูสาขาที่ไม่ได้จม:

git branch --all --no-merged

อาจสงสัยได้ แต่ฉันแนะนำคำตอบโดย cxreg


3

หากจำนวนการคอมมิทที่ไม่ได้ส่งออกมาเป็นตัวเลขหลักเดียวซึ่งมักจะเป็นวิธีที่ง่ายที่สุดคือ:

$ git checkout

คอมไพล์ตอบโดยบอกคุณว่าคุณเป็น "ไปข้างหน้า N มุ่งมั่น" สัมพันธ์กับที่มาของคุณ ดังนั้นให้ระลึกไว้เสมอว่าเมื่อดูบันทึก หากคุณ "ดำเนินการล่วงหน้า 3 ครั้ง" การทำสัญญา 3 อันดับแรกในประวัติยังคงเป็นส่วนตัว


2

วิธีหนึ่งในการทำสิ่งต่าง ๆ คือการแสดงรายการการกระทำที่มีอยู่ในสาขาหนึ่ง แต่ไม่ใช่วิธีอื่น

git log ^origin/master master

อักขระ '^' ทำหน้าที่อะไร
Aran Mulholland

@AranMulholland มันไม่ได้อยู่ที่นี่
อเล็กซ์

1

ดังกล่าวข้างต้น:

คอมไพล์ diff ต้นกำเนิด / master .. HEAD

แต่ถ้าคุณใช้ git gui

หลังจากเปิดส่วนต่อประสาน gui ให้เลือก "Repository" -> ภายใต้ " Visualize History "

หมายเหตุ: บางคนชอบใช้ CMD Prompt / Terminal ในขณะที่บางคนชอบใช้ Git GUI (เพื่อความเรียบง่าย)


เห็นภาพตัวเลือกใน git gui เป็นหนึ่ง
Rajesh Kolhapure

-2

นี่คือโซลูชันแบบพกพาของฉัน (เชลล์สคริปต์ที่ทำงานบน Windows ด้วยโดยไม่ต้องติดตั้งเพิ่มเติม) ซึ่งแสดงความแตกต่างจากแหล่งกำเนิดสำหรับทุกสาขา: git-fetch-log

ตัวอย่างผลลัพธ์:

==== branch [behind 1]

> commit 652b883 (origin/branch)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-10 09:11:11 +0100
|
|     Commit on remote
|
o commit 2304667 (branch)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-08-28 13:21:13 +0200

      Commit on local

==== master [ahead 1]

< commit 280ccf8 (master)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 21:42:55 +0100
|
|     Commit on local
|
o commit 2369465 (origin/master, origin/HEAD)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2016-03-10 09:02:52 +0100

      Commit on remote

==== test [ahead 1, behind 1]

< commit 83a3161 (test)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 22:50:00 +0100
|
|     Diverged from remote
|
| > commit 4aafec7 (origin/test)
|/  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
|   Date:   2016-03-14 10:34:28 +0100
|
|       Pushed remote
|
o commit 0fccef3
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-09-03 10:33:39 +0200

      Last common commit

พารามิเตอร์ที่ส่งผ่านสำหรับบันทึกเช่น--onelineหรือ--patchสามารถใช้


-3
git show

จะแสดงความแตกต่างทั้งหมดในการกระทำในท้องถิ่นของคุณ

git show --name-only

จะแสดงรหัสกระทำในพื้นที่และชื่อของกระทำ


3
git showแสดงเฉพาะการคอมมิชชันล่าสุดไม่ว่าจะถูกส่งไปยังรีโมตหรือไม่ก็จะไม่แสดงการคอมมิชชันที่คุณไม่ได้ชำระทั้งหมด

-6
git diff origin

สมมติว่าสาขาของคุณถูกตั้งค่าให้ติดตามจุดเริ่มต้นจากนั้นควรแสดงความแตกต่าง

git log origin

จะให้บทสรุปของความมุ่งมั่น


3
git log originจะแสดงการกระทำที่ถูกผลักไปแล้ว แต่จะไม่แสดงการผูกมัดที่ยังไม่ได้ผลักซึ่งจะมีมากขึ้นตามแนวของโปสเตอร์ต้นฉบับที่ขอ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.