簡體   English   中英

如何查看 Git 提交中的更改?

[英]How can I see the changes in a Git commit?

當我執行git diff COMMIT時,我看到了該提交和 HEAD 之間的更改(據我所知),但我想查看該單個提交所做的更改。

我沒有在diff / log上找到任何明顯的選項可以給我 output。

要查看特定COMMIT哈希的差異,其中COMMIT是提交的哈希:

git diff COMMIT~ COMMIT會告訴你那個COMMIT的祖先和COMMIT之間的區別。 有關命令的詳細信息和有關~符號及其朋友的gitrevisions,請參閱git diff的手冊頁。

或者, git show COMMIT會做一些非常相似的事情。 (提交的數據,包括其差異 - 但不適用於合並提交。)請參閱git show 手冊頁

(也git diff COMMIT將向您展示該COMMIT和頭部之間的區別。)

如“ git commit 與其父項的差異的簡寫? ”中所述,您還可以將git diff用於:

git diff COMMIT^!

要么

git diff-tree -p COMMIT

使用 git show,您需要(為了只關注 diff)執行以下操作:

git show --color --pretty=format:%b COMMIT

COMMIT參數是一個commit-ish

commit對象或一個對象可以被遞歸地解除引用到一個提交對象。 以下是所有提交-ishes:提交對象,標簽對象是指向一個commit對象,標簽對象指向一個標簽對象指向一個commit對象,等等。

請參閱gitrevision "SPECIFYING REVISIONS"以引用 commit-ish。
另請參閱“ Git 中 tree-ish 是什么意思? ”。

你也可以試試這個簡單的方法:

git show <COMMIT>

git show顯示在最近一次提交中所做的更改。 它相當於git show HEAD

git show HEAD~1帶你返回一次提交。

我通常這樣做:

git diff HEAD~1

顯示有關上次提交的更改。 如果您有更多提交,只需將數字 1 增加到您想要查看的提交差異數量。

采用:

git show <commit_sha>

這將向您展示該提交中的內容。 您可以通過在兩個提交 SHA-1 哈希之間放置一個空格來確定范圍。

git show <beginning_sha> <ending_sha>

如果您經常進行變基,這非常有用,因為您的功能日志將全部排成一行。

如果您想查看最后 3 次提交,您可以使用 HEAD 語法

git show HEAD~3 HEAD

首先使用提交 ID,

git log #to list all

要么

git log -p -1 #last one commit id

復制提交 ID。

現在我們使用兩種方法來列出來自特定提交的更改,

方法一:

git diff commit_id^! #commit id something like this 1c6a6000asad012

方法二:

git show commit_id
For example: git show 1c6a600a

git-diff(1)的手冊頁:

git diff [options] [<commit>] [--] [<path>…]
git diff [options] --cached [<commit>] [--] [<path>…]
git diff [options] <commit> <commit> [--] [<path>…]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>

使用中間的第三個:

git diff [options] <parent-commit> <commit>

同樣來自同一手冊頁的底部,在示例部分

$ git diff HEAD^ HEAD      <3>

比較上次提交和上次提交之前的版本。

誠然,它的措辭有點令人困惑,因為它不會那么令人困惑

將最近的提交與其之前的提交進行比較。

以下似乎可以完成這項工作; 我用它來顯示合並帶來了什么。

git whatchanged -m -n 1 -p <SHA-1 hash of merge commit>

另一種可能:

git log -p COMMIT -1

我喜歡下面的命令來比較特定的提交和它的最后一次提交:

git diff <commit-hash>^-

例子:

git diff cd1b3f485^-

您可以使用git diff HEAD HEAD^1來查看與父提交的差異。

如果您只想查看文件列表,請添加--stat選項。

git difftool COMMIT^ <commit hash>

如果您配置了 difftool,也可以使用。

請參閱此處如何配置 difftool 或者這里的手冊頁。

此外,您可以使用git diff-tree --no-commit-id --name-only -r <commit hash>查看在給定提交哈希中更改/提交了哪些文件。

要通過提交查看作者和時間,請使用git show COMMIT 這將導致這樣的事情:

commit 13414df70354678b1b9304ebe4b6d204810f867e
Merge: a2a2894 3a1ba8f
Author: You <you@you.com>
Date:   Fri Jul 24 17:46:42 2015 -0700

     Merge remote-tracking branch 'origin/your-feature'

如果您想查看哪些文件已更改,請使用上面Merge行中的值運行以下命令, git diff --stat a2a2894 3a1ba8f

如果您想查看實際差異,請運行git --stat a2a2894 3a1ba8f

如果您只想查看最新提交中的更改,只需git show即可。

要檢查完整的更改:

  git diff <commit_Id_1> <commit_Id_2>

僅檢查更改/添加/刪除的文件:

  git diff <commit_Id_1> <commit_Id_2> --name-only

注意:為了檢查差異而不在兩者之間提交,您不需要放置提交 ID。

以下代碼將顯示當前提交

git show HEAD

此命令將為您提供 Git 父提交哈希:

git log -n 2 <commit-hash>

之后git diff-tool <commit-hash> <parent-commit-hash>

例子:

bonnie@bonnie ~/ $ git log -n 2 7f65b9a9d3820525766fcba285b3c678e889fe3

commit 7f65b9a9d3820525766fcba285b3c678e889fe3b
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 13:17:07 2016 +0530

CSS changed to maintain the aspect ratio of the channel logos and to fit them properly.

commit c3a61f17e14e2b80cf64b172a45f1b4826ee291f
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 11:28:09 2016 +0530

The ratio of the height to width of the channel images are maintained.

在這之后

git difftool 7f65b9a9d3820525766fcba285b3c678e889fe3b c3a61f17e14e2b80cf64b172a45f1b4826ee291f

我在 Windows 10 上運行 Git 版本 2.6.1.windows.1,所以我需要對 Nevik 的答案稍作修改(波浪號而不是插入符號):

git diff COMMIT~ COMMIT

另一種選擇是引用插入符號:

git diff "COMMIT^" COMMIT

還可以查看特定文件的兩次提交之間的更改。

git diff <commit_Id_1> <commit_Id_2> some_dir/file.txt

一些答案錯過了一個特殊情況。 如何查看根提交所做的更改,因為它沒有父/祖先。

兩個都

git diff <root_commit>^..<root_commit>

git diff <root_commit>~..<root_commit>

拋出錯誤。

$git diff 27e521ca73a46b2d3a28568dc49fced81e46aaea~ 27e521ca73a46b2d3a28568dc49fced81e46aaea
fatal: ambiguous argument '27e521ca73a46b2d3a28568dc49fced81e46aaea~': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

git diff <root_commit>^!

顯示 diff btw root commit和 HEAD。 像這樣:

$ git diff 27e521ca73a46b2d3a28568dc49fced81e46aaea^!
diff --git a/file1.txt b/file1.txt
new file mode 100644
index 0000000..80f3f1a
--- /dev/null
+++ b/file1.txt
@@ -0,0 +1,5 @@
+Create the first file.
+
+Add some placeholder text to first file.
+
+
diff --git a/file2.txt b/file2.txt
new file mode 100644
index 0000000..66e494f
--- /dev/null
+++ b/file2.txt
@@ -0,0 +1,6 @@
+This is the second file.
+
+It has an uncommited commit.
+
+We use it to demo default `git diff` behaviour.
+

(這些是我的根提交和 HEAD 的所有提交所做的更改)。

對於根提交

我發現只有

git show --color --pretty=format:%b <root_commit_hash>

作品。

像這樣:

$ git show --color --pretty=format:%b 27e521ca73a46b2d3a28568dc49fced81e46aaea

diff --git a/README b/README
new file mode 100644
index 0000000..12a04f0
--- /dev/null
+++ b/README
@@ -0,0 +1,6 @@
+# git-diff-demo
+
+This repo documents the demo of the git diff command.
+We will have options, and use cases.

(我的根提交只添加了自述文件)

檢查文件更改的更簡約方法(示例)

# 1. Checkout a branch and see the list of commits
git log --oneline -5

# > Output
9b9b1f8 (HEAD -> master) Updated ABC
d58e5da chore: Added files
5a4aa2c chore: Added my pipeline
bb2b0b7 feat: Added ABC
473f711 feat: Added ZYX
# 2. Pick a commit hash and check which files were modified
git show --stat --oneline d58e5da

# > Output
d58e5da chore: Added versioning files
 Someabcfile                            | 18 ++++++++++++++++++
 myfolder/file.py                       | 19 +++++++++++++++++++
 myfolder/file.js                       |  7 +++++++
 myfolder/file.txt                      |  1 +
 4 files changed, 45 insertions(+)
# 3. Pick a file to check the differences
git show d58e5da myfolder12/file.py

或者,或者,檢查列表中單個提交中的所有文件差異:

git show d58e5da

如果在圖形視圖中檢查源更改,請使用:

gitk (your commit id goes here)

例如:

gitk HEAD~1 

對我來說這很好用

git show COMMIT --compact-summary

其中顯示了下一個信息

輸出擴展頭信息的精簡摘要,例如文件創建或刪除(“new”或“gone”,如果是符號鏈接,則可選“+l”)和模式更改(“+x”或“-x”用於添加或刪除diffstat 中的可執行位)。 信息放在文件名部分和圖形部分之間。 暗示--stat。

git difftool "HASH_in_history" -- "path_to_file"

  1. 可以在git的具體地址上點擊各個commit查看
  2. 如果您使用工具提交,則可以傳遞顯示歷史記錄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM