ฉันจะดูdiff
ระหว่างสาขาในพื้นที่และสาขาระยะไกลได้อย่างไร
git diff HEAD origin/HEAD
ซึ่งดูเหมือนจะชี้ไปที่สาขาระยะไกลที่แตกต่างจากที่ฉันตั้งใจไว้ ใช้ชื่อสาขาเต็มทำงานตามที่คาดไว้
ฉันจะดูdiff
ระหว่างสาขาในพื้นที่และสาขาระยะไกลได้อย่างไร
git diff HEAD origin/HEAD
ซึ่งดูเหมือนจะชี้ไปที่สาขาระยะไกลที่แตกต่างจากที่ฉันตั้งใจไว้ ใช้ชื่อสาขาเต็มทำงานตามที่คาดไว้
คำตอบ:
หากต้องการอัปเดตสาขาติดตามระยะไกลคุณต้องพิมพ์git fetch
ก่อนแล้วจึง:
git diff <masterbranch_path> <remotebranch_path>
คุณสามารถgit branch -a
แสดงรายการทุกสาขา (ภายในและระยะไกล) จากนั้นเลือกชื่อสาขาจากรายการ (เพียงลบremotes/
จากชื่อสาขาระยะไกล
ตัวอย่าง: git diff master origin/master
(โดยที่ "master" เป็นสาขาหลักของท้องถิ่นและ "origin / master" เป็นรีโมตนั่นคือ Origin และ Branch Master)
git fetch
)
[diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = false
ของคุณตรวจสอบให้แน่ใจว่าพา ธ ของคุณไปยังไฟล์ code.exe นั้นถูกต้อง
git diff <local branch> <remote>/<remote branch>
ตัวอย่างเช่นgit diff master origin/master
หรือgit diff featureA origin/next
แน่นอนว่าต้องมีสาขาการติดตามระยะไกลที่คุณต้องการgit fetch
ก่อน และคุณต้องการให้มีข้อมูลล่าสุดเกี่ยวกับสาขาในที่เก็บระยะไกล
git diff <remote>/<remote branch> <local branch>
เพื่อดูสิ่งที่ผลักดันของฉันจะทำกับ repo ระยะไกล
git diff origin
นั้นก็เพียงพอแล้วถ้าคุณเพิ่งเปรียบเทียบกับสาขาต้นน้ำของคุณ
git fetch
ที่จุดเริ่มต้นมันทำให้เกิดปัญหากับมือใหม่อย่างฉัน
git diff <remote>/<remote branch> <local branch>
เหรอ? มิฉะนั้นฉันได้รับการเพิ่มและลบเปิดเครื่องคอมพิวเตอร์ของฉัน (รุ่น git 2.7.0.windows.2)
ประเภทแรก
git branch -a
เพื่อรับรายการสาขาที่มีอยู่ ในผลลัพธ์คุณอาจเห็นบางสิ่งเช่น
* master
remotes/main/master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/mt
remotes/upstream/master
remotes/upstream/mt
จากนั้นแสดงความแตกต่าง
git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master
...
มากกว่า..
หรือไม่
git log origin/my_branch..
ซึ่งจะใช้HEAD
เป็นอ้างอิงในท้องถิ่นซึ่งส่วนใหญ่เป็นสิ่งที่คุณหมายถึง
fatal: bad revision
fatal: ambiguous argument
ทั้งหมดที่ฉันต้องการคือการเห็นความแตกต่างในไฟล์เดียวกันจากสาขาอื่นนั่นคือสิ่งที่มากเกินไปที่จะถาม? ใช่มันเป็น :-) ใช้git diff remotes/origin/<base branch> <current branch> -- <filename>
งานได้ดีกับคอมไพล์ 1.8.3.1
หากคุณอยู่ในสาขาที่กำหนดและคุณต้องการเปรียบเทียบกับสาขาต้นน้ำที่คุณกำลังติดตามใช้
git diff @{upstream}
หากอัพสตรีมของคุณไม่ได้ถูกตั้งค่า (โดยทั่วไปจะเป็นกรณีนี้ขอบคุณArijoonในความคิดเห็น)
git diff @{push}
ด้วยความช่วยเหลือของคำตอบนี้เอกสารประกอบการคอมไพล์สำหรับการระบุการแก้ไขมี:
<branchname>@{upstream}
เช่นmaster@{upstream}
,@{u}
ต่อท้าย@{upstream}
ไป BRANCHNAME (แบบสั้น<branchname>@{u}
) หมายถึงสาขาที่สาขาที่ระบุโดยbranchname
การตั้งค่าเพื่อสร้างด้านบนของ (กำหนดค่าด้วยbranch.<name>.remote
และbranch.<name>.merge
)branchname
ค่าเริ่มต้นที่ขาดหายไปเป็นปัจจุบัน
git diff @ @{upstream}
เปลี่ยนเส้น สิ่งที่เพิ่มขึ้น@
คือHEAD
สิ่งที่คุณเป็นอยู่ในขณะนี้ดังนั้นคุณกำลังเปรียบเทียบHEAD
กับต้นน้ำที่สาขาของคุณกำลังติดตาม คุณสามารถใช้@{push}
แทน
fatal: ambiguous argument '@upstream': unknown revision or path not in the working tree
. ต้องใช้git diff @\{upstream\}
แทน 😥
git fetch
ก่อนอื่นไม่ทำอะไรเลยไม่แสดงผลลัพธ์ ทดสอบโดยการลบไฟล์ใน repo origin และรันคำสั่งนี้แบบโลคัล .. ทำงานเฉพาะหลังจากดึงข้อมูล
ฉันเข้าใจผลลัพธ์ของ:
git diff <remote-tracking branch> <local branch>
ที่แสดงให้ฉันเห็นสิ่งที่จะถูกทิ้งและสิ่งที่จะเพิ่มถ้าฉันผลักสาขาท้องถิ่น แน่นอนมันเหมือนกันเพียงตรงกันข้าม แต่สำหรับฉันอ่านได้ง่ายขึ้นและฉันรู้สึกสบายใจมากขึ้นในการดูว่าจะเกิดอะไรขึ้น
วิธีง่าย ๆ :
git fetch
git log -p HEAD..FETCH_HEAD
สิ่งนี้จะดึงการเปลี่ยนแปลงจากรีโมตเริ่มต้นของคุณ (ต้นทาง) สิ่งนี้จะถูกสร้างขึ้นโดยอัตโนมัติเมื่อคุณโคลน repo git fetch origin master
นอกจากนี้คุณยังสามารถอย่างชัดเจน:
จากนั้นใช้บันทึก git เพื่อเปรียบเทียบสาขาปัจจุบันของคุณกับข้อมูลที่เพิ่งดึง ( -p
ตัวเลือก (สร้างแพทช์) คือสิ่งที่แสดงให้เห็นถึงความแตกต่าง )
นี่คือวิธีที่ฉันทำ
#To update your local.
git fetch --all
สิ่งนี้จะดึงข้อมูลทุกอย่างจากระยะไกลดังนั้นเมื่อคุณตรวจสอบความแตกต่างมันจะเปรียบเทียบความแตกต่างกับสาขาระยะไกล
#to list all branches
git branch -a
คำสั่งดังกล่าวจะแสดงสาขาทั้งหมด
#to go to the branch you want to check difference
git checkout <branch_name>
#to check on which branch you are in, use
git branch
(or)
git status
ตอนนี้คุณสามารถตรวจสอบความแตกต่างได้ดังนี้
git diff origin/<branch_name>
สิ่งนี้จะเปรียบเทียบสาขาในพื้นที่ของคุณกับสาขาระยะไกล
ให้สาขาการทำงานของคุณคือการพัฒนาและต้องการแยกความแตกต่างระหว่างสาขาการพัฒนาท้องถิ่นและสาขาการพัฒนาระยะไกลกรณีเช่นนั้นไวยากรณ์ควรเป็นเช่นgit diff remotes/origin/development..development
หรือ
git fetch origin
git diff origin/development
tl; dr :git diff <local branch> <remote branch>
เมื่อใช้คอมไพล์บนเชลล์ฉันชอบปรับทิศทางตัวเองก่อนโดยดูรอบ ๆ นี่คือคำสั่งที่จะแสดงสาขาทั้งหมด
$ git branch -a # (or git branch --all)
* my-branch
master
remotes/origin/some-branch
remotes/origin/HEAD -> origin/master
remotes/origin/my-branch
remotes/origin/some-other-branch
remotes/origin/master
นี่ฉันมีสองสาขาในประเทศ ( my-branch
และmaster
) และ 4 ระยะไกล ( some-branch
, some-other-branch
, master
และmy-branch
)
นอกจากนี้ดอกจันติดกับmy-branch
สัญญาณความจริงที่ว่าฉันอยู่ในปัจจุบันในสาขาที่ (คุณจะยังไม่ทราบว่าด้วยการใช้คำสั่งgit status
ว่าจะเอาท์พุท: On branch my-branch.
)
หมายเหตุ: กิ่งก้านยาวในเปลือกทุบตี git จะแสดงเป็นสีแดงในขณะที่กิ่งท้องถิ่นจะแสดงเป็นสีเขียว
หากคุณต้องการแสดงสาขาระยะไกล :
$ git branch -r # (or git branch --remotes)
origin/some-branch
origin/HEAD -> origin/master
origin/my-branch
origin/some-other-branch
origin/master
เพื่อแสดงเฉพาะสาขาท้องถิ่นคุณอาจถูกล่อลวงให้ใช้git branch -l
แต่นั่นเป็นคำสั่งที่แตกต่างอย่างสิ้นเชิง เพื่อแสดงการใช้งานในสาขาท้องถิ่นgit branch
โดยไม่มีตัวเลือก
$ git branch
* my-branch
master
ในการตรวจสอบตัวเลือกสาขาพื้นฐานให้เสร็จสมบูรณ์--list
นั้นตรงกันข้ามกับสิ่งที่คุณคาดหวังว่าจะมีเพื่อให้สามารถกรองได้ ใช้กับรูปแบบเช่นนี้:
$ git branch --list 'my*'
* my-branch
นอกจากนี้คุณยังสามารถรวม--list
กับตัวเลือก-a
และ-r
ให้แน่ใจว่าได้ปรับรูปแบบของคุณให้สอดคล้องกัน ( จำไว้ว่า: สาขาระยะไกลเริ่มต้นด้วย "รีโมท" ) ตัวอย่าง:
# this will show all branches (local & remote) that start with my
$ git branch --list 'my*' -a
* my-branch
# better: the pattern includes the remote
$ git branch --list '*my*' -a
* my-branch
remotes/origin/my-branch
เอกสาร: https://git-scm.com/docs/git-branch
ตอนนี้คุณสามารถเปรียบเทียบสองสาขาจากสาขาที่มีอยู่ทั้งหมด (คุณสามารถเปรียบเทียบสองท้องถิ่นหรือสองรีโมท)
ที่นี่ฉันกำลังเปรียบเทียบโลคัลกับรีโมตmy-branch
พวกเขาซิงโครไนซ์ดังนั้นฉันไม่ได้รับผลลัพธ์ใด ๆ :
$ git diff my-branch remotes/origin/my-branch
หมายเหตุ: คุณต้องให้ชื่อเต็มของสาขาที่ไม่มีเครื่องหมายคำพูด
ฉันยังสามารถเปรียบเทียบในท้องถิ่นระยะไกลmy-branch
master
ที่นี่ฉันได้รับผลลัพธ์บางอย่างเนื่องจากระยะไกลmy-branch
ไม่ได้ถูกรวมเข้ากับสาขาหลัก
$ git diff my-branch remotes/origin/master
diff --git a/src/controllers/call.controller.js b/src/controllers/call.controller.js
index fd79b98..df3d798 100644
--- a/src/controllers/call.controller.js
+++ b/src/controllers/call.controller.js
@@ -261,7 +261,7 @@ function callController() {
/*
* Function: doCall
[ . . . ]
หากคุณต้องการที่จะเห็นความแตกต่างเป็นเพียงแค่ชื่อของไฟล์ที่มีการเปลี่ยนแปลงแล้วใช้งาน:
git diff --name-status <remote-branch> <local-branch>
,
อื่นนี้จะแสดงให้เห็นความแตกต่างทั้งหมดระหว่างสองสาขา:
git diff <remote-branch> <local-branch>
git pull
นี่คือคำตอบที่จดชวเลขถ้าคุณกำลังเปรียบเทียบสาขาปัจจุบันของคุณและเพื่อสิ่งที่คุณต้องการ
git fetch
git diff FETCH_HEAD
คำสั่งแรกจะคิดออกว่าสาขาระยะไกลตรงกับสาขาปัจจุบันของคุณ สิ่งประดิษฐ์ของการคำนวณนั้นในการFETCH_HEAD
อ้างอิง จากนั้นคำสั่งที่สองใช้การอ้างอิงนั้นเปรียบเทียบกับสิ่งที่สาขาปัจจุบันของคุณมี
ฉันรู้ว่ามีคำตอบหลายข้อสำหรับคำถามนี้อยู่แล้ว แต่ฉันได้รับข้อผิดพลาดแปลก ๆ เมื่อพยายามส่วนใหญ่
ในกรณีของฉันฉันมีสองเรียกว่าระยะไกลheroku
ที่เป็นไม่origin
และเพราะมันไม่ได้อยู่ในการซิงค์ผมได้รับข้อผิดพลาดนี้เมื่อพยายามที่จะเรียกใช้git diff master heroku/master
:
fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.
หรือสิ่งนี้เมื่อลองวิธีอื่นgit diff master..heroku/master
:
fatal: bad revision 'master..heroku/master'
การแก้ปัญหาได้กล่าวถึงชื่อระยะไกลอย่างชัดเจนgit fetch
ก่อนที่จะทำงานgit diff
ในกรณีของฉัน:
$ git fetch heroku
$ git diff master heroku/master
หวังว่าจะช่วยผู้อื่นด้วยปัญหาเดียวกันนี้
git difftool <commit> .
สิ่งนี้จะเปรียบเทียบการกระทำที่คุณต้องการกับไฟล์ในเครื่องของคุณ อย่าลืมจุดในที่สุด (สำหรับท้องถิ่น)
ตัวอย่างเช่นในการเปรียบเทียบไฟล์ในเครื่องของคุณกับการคอมมิท:
git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341
(และคุณไม่จำเป็นต้องดึงข้อมูลคอมไพล์ยกเว้นว่าจำเป็นต้องทำการเปรียบเทียบกับคอมมิทใหม่)
ตัวอย่าง
git diff 'master' 'testlocalBranch'
หากคุณกำลังใช้โปรแกรมแก้ไขเช่น webstorm คุณสามารถคลิกขวาที่ไฟล์เลือกเปรียบเทียบกับสาขาและพิมพ์ / เลือกสาขาของคุณ
ใน VS 2019 เพียงทำ FETCH อย่าดึงรหัส
นี่คือสิ่งที่ฉันทำ เพิ่มด้านล่างในไฟล์. gitconfig เพื่อให้ฉันสามารถใช้ Beyond Compare
File location: C:\Users\[username]\.gitconfig
เพิ่มด้านล่าง
[diff]
tool = bc
[difftool "bc"]
path = c:/Program Files/Beyond Compare 4/bcomp.exe
เปิดพร้อมท์คำสั่งแล้วไปที่ไดเรกทอรีทำงาน ฉันให้ด้านล่างเพื่อเปรียบเทียบสาขา DEV ท้องถิ่นกับสาขา DEV ระยะไกล
git difftool dev origin/dev --dir-diff
สิ่งนี้จะเปิดนอกเหนือจากการเปรียบเทียบและเปิดไดเรกทอรีที่มีไฟล์ที่แตกต่างกัน หากไม่มีการเปลี่ยนแปลงใด ๆ ที่นอกเหนือจากการเปรียบเทียบจะไม่เริ่มต้น
ฉันสงสัยว่าจะมีการเปลี่ยนแปลงในสาขาหลักของฉัน...
git หลักการชำระเงิน
สถานะคอมไพล์
git branch -a
รีโมทหลัก/ แหล่งกำเนิด / ต้นแบบ
git diff origin / master
git config alias.udiff 'diff @{u}'
git fetch # Do this if you want to compare with the network state of upstream; if the current local state is enough, you can skip this
git udiff
วิธีนี้จะตอบคำถามในหัวข้อ ("ห่างไกล"); หากคุณต้องการแตกต่างจาก "รีโมต" (ที่ไม่ได้กำหนดค่าเป็นอัพสตรีมสำหรับสาขา) คุณต้องกำหนดเป้าหมายโดยตรง คุณสามารถดูสาขาระยะไกลทั้งหมดได้ดังต่อไปนี้:
git branch -r
คุณสามารถดูรีโมตที่กำหนดค่าไว้ทั้งหมดได้ดังต่อไปนี้:
git remote show
คุณสามารถดูการกำหนดค่าสาขา / การติดตามสำหรับรีโมทเดียว (เช่นจุดเริ่มต้น) ดังนี้:
git remote show origin
เมื่อคุณกำหนดสาขาต้นกำเนิดที่เหมาะสมให้ทำ diff ต่าง ๆ แบบปกติ :)
git diff [MY_LOCAL] MY_REMOTE_BRANCH
มันค่อนข้างง่าย คุณสามารถใช้ได้:git diff remote/my_topic_branch my_topic_branch
my_topic_branch
สาขาหัวข้อของคุณอยู่ที่ไหน
สมมติว่าคุณได้ตั้งค่าของคุณorigin
เป็นที่เก็บระยะไกลแล้ว จากนั้น
git diff <local branch> <origin>/<remote branch name>
ลอง:
git diff origin HEAD
สมมติว่าคุณต้องการกระจายสาขาท้องถิ่นปัจจุบันของคุณHEAD
กับต้นกำเนิด และสมมติว่าคุณอยู่ในสาขาท้องถิ่น :)
ถ้าคุณใช้TortoiseGit (มันให้ GUI สำหรับ Git) คุณสามารถคลิกขวา Git ของคุณ repo Git Sync
โฟลเดอร์แล้วคลิก
คุณสามารถเลือกสาขาของคุณเพื่อเปรียบเทียบถ้าไม่ได้เลือก กว่าที่คุณจะเห็นความแตกต่างกระทำ นอกจากนี้คุณยังสามารถคลิกขวาที่การส่งมอบCompare with previous revision
เพื่อดูความแตกต่างแบบเคียงข้างกัน