GitHub สามารถแสดงประวัติการเปลี่ยนแปลงที่เกิดขึ้นกับไฟล์เดียวในรูปแบบแพตช์ได้หรือไม่?


89

หากคุณทำเช่นgit log --patch -- path/to/fileนั้นคุณจะได้รับประวัติของไฟล์พร้อมกับความแตกต่างของการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับแต่ละคอมมิตดังนี้:

$ git log --patch -- git-rebase.sh

commit 20351bb06bf4d32ef3d1a6849d01636f6593339f
Author: Ramkumar Ramachandra <artagnon@gmail.com>
Date:   Sat Jun 15 18:43:26 2013 +0530

    rebase: use 'git stash store' to simplify logic

    rebase has no reason to know about the implementation of the stash.  In
    the case when applying the autostash results in conflicts, replace the
    relevant code in finish_rebase () to simply call 'git stash store'.

    Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff --git a/git-rebase.sh b/git-rebase.sh
index d0c11a9..17be392 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -153,11 +153,8 @@ finish_rebase () {
                then
                        echo "$(gettext 'Applied autostash.')"
                else
-                       ref_stash=refs/stash &&
-                       >>"$GIT_DIR/logs/$ref_stash" &&
-                       git update-ref -m "autostash" $ref_stash $stash_sha1 ||
-                       die "$(eval_gettext 'Cannot store $stash_sha1')"
-
+                       git stash store -m "autostash" -q $stash_sha1 ||
+                       die "$(eval_gettext "Cannot store \$stash_sha1")"
                        gettext 'Applying autostash resulted in conflicts.
 Your changes are safe in the stash.
 You can run "git stash pop" or "git stash drop" it at any time.

commit 2e6e276decde2a9f04fc29bce734a49d3ba8f484
Author: Ramkumar Ramachandra <artagnon@gmail.com>
Date:   Fri Jun 14 18:47:52 2013 +0530

    rebase: use peel_committish() where appropriate

    The revisions specified on the command-line as <onto> and <upstream>
    arguments could be of the form :/quuxery; so, use peel_committish() to
    resolve them.  The failing tests in t/rebase and t/rebase-interactive
    now pass.

    Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>

diff --git a/git-rebase.sh b/git-rebase.sh
index d0c11a9..6987b9b 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -434,7 +434,7 @@ then
                shift
                ;;
        esac
-       upstream=`git rev-parse --verify "${upstream_name}^0"` ||
+       upstream=$(peel_committish "${upstream_name}") ||
        die "$(eval_gettext "invalid upstream \$upstream_name")"
        upstream_arg="$upstream_name"
 else
@@ -470,7 +470,7 @@ case "$onto_name" in
        fi
        ;;
 *)
-       onto=$(git rev-parse --verify "${onto_name}^0") ||
+       onto=$(peel_committish "$onto_name") ||
        die "$(eval_gettext "Does not point to a valid commit: \$onto_name")"
        ;;
 esac

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


เปรียบเทียบ Viewช่วยให้คุณได้สิ่งที่ใกล้เคียงกับสิ่งที่คุณกำลังมองหา แต่น่าเสียดายที่ไม่ใช่สำหรับแต่ละไฟล์

2
หากคุณทำการร้องขอคุณสมบัติบางทีทีมนักพัฒนา GitHub จะเพิ่มมันเข้าไป

คำตอบ:


84

URL ต่อไปนี้จะแสดงคอมมิตทั้งหมดสำหรับไฟล์เดียวในรูปแบบที่คล้ายกับgit log -p:

http://github.com/<username>/<project>/commits/<branch>/<path/to/file>

... ที่ไหน:

  • <username> คือชื่อผู้ใช้ของบุคคลที่เป็นเจ้าของ repo
  • <project> คือชื่อ repo
  • <branch> สามารถเป็น 'master' หรือสาขาอื่น ๆ
  • <path/to/file> หวังว่าจะอธิบายตนเองได้

หยิบที่ (ค่อนข้าง) สุ่มนี่คือตัวอย่างจากที่ซื้อคืนที่เป็นกลุ่มผู้ลี้ภัย-


+1. Commits API เพิ่มเติม: develop.github.com/p/commits.html (ในส่วน GitHub API develop.github.com )
VonC

18
นั่นคือ git log path / to / file ฉันต้องการ git log -p path / to / file
ma11hew28

1
ทั้งหมดนี้คือการแสดงการอัปเดตล่าสุดไม่ใช่ประวัติการอัปเดต
Gerry

4
ฉันไม่รู้ว่าทำไมถึงได้รับการโหวต ฉันเดาว่าผู้คนไม่ได้อ่านคำถามอย่างระมัดระวัง คำตอบนี้ไม่ได้ให้รายการความแตกต่างgit log --patch -- path/to/fileซึ่งเป็นสิ่งที่ OP ขอ
jcoffland

1
@jcoffland กำลังได้รับการโหวตเพราะคนส่วนใหญ่ชอบฉันพบว่าสิ่งนี้มีประโยชน์และนี่คือสิ่งที่เรากำลังมองหาโดยไม่คำนึงถึงคำถามของ op
mr5

49

ตามคำตอบข้างต้นและความพยายามของตัวเองเพื่อหาคุณลักษณะตรงนี้ก็ปรากฏคำตอบที่ถูกต้องสำหรับคำถามนี้ไม่มี

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


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

18
คำตอบนี้มีทั้งเฉพาะเจาะจงและถูกต้องซึ่งแตกต่างจากคำตอบอีกสองคำตอบที่ไม่ได้รับทราบว่าคำถามนั้นกำลังถามอะไร
jhk

5
นี่คือคำตอบที่ถูกต้อง Github ไม่มีวิธีแสดงผลการแก้ไขพร้อมกับบันทึกสำหรับไฟล์เดียวแบบที่ git log -p - file ทำ
58

4
อีก 2 คำตอบไม่ถูกต้อง คำตอบนี้ช่วยฉันประหยัดเวลาและความยุ่งยาก
Schien

3
"สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม" แน่นอนและสิ่งหนึ่งที่ช่วยฉันประหยัดเวลา ขอบคุณ jhk.
ChrisJJ

34

อีกทางเลือกหนึ่งสำหรับคำตอบ URL โดยตรง (ซึ่ง BTW ถูกต้องสมบูรณ์) โดยใช้อินเทอร์เฟซของ GitHub คือ:

  • คลิกที่มุมมอง "แหล่งที่มา"
  • เปลี่ยนเป็นสาขาที่ต้องการ
  • มองหาไฟล์ที่คุณต้องการจนกว่าคุณจะเข้าสู่มุมมองแหล่งที่มาจริงสำหรับไฟล์
  • คลิก "ประวัติ" ที่มุมขวาบน

13
นอกจากนี้ยังไม่ได้ให้สิ่งที่ผู้โพสต์ต้นฉบับกำลังมองหา git log -p -- fileเขาต้องการส่งออกแพทช์เช่นเดียวกับสิ่งที่เขาจะได้รับด้วย สิ่งที่คุณแสดงเป็นเพียงบันทึกของไฟล์ใดไฟล์หนึ่งเช่นgit log -- fileไม่มีแพตช์ต่าง

-3

หากคุณใช้ Linux ให้ติดตั้งTIGเป็น:

sudo apt-get ติดตั้ง tig

แล้ว,

เส้นทาง tig / to / file /

มันจะแสดงให้คุณเห็นการกระทำทั้งหมดและการเปลี่ยนแปลงตามลำดับ

ตลาดปาร์เวซ

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