我正在探索FFMpeg專案的 git 歷史。我在提交之間的每個檔案上執行了更改,517573a67088b5c7a25c18373434e3448892ee93并80bb65fafab1d2f5f58a8453c6334c784ee27c08使用以下命令創建了一個補丁:
git diff 80bb65fafab1d2f5f58a8453c6334c784ee27c08..c5079bf3bccd24bf8ed45ff47ff4071fd09e9fd8 -p > my.patch
現在,例如,我知道該檔案doc/examples/encode_video.c已在行中被修改,并且在修改此行149之后我將獲得唯一的下一個提交。c5079bf3bccd24bf8ed45ff47ff4071fd09e9fd8考慮到一些提交是在遙控器上,我正在使用以下命令:
git log -L149,149: doc/examples/encode_video.c -1 c5079bf3bccd24bf8ed45ff47ff4071fd09e9fd8..HEAD --remotes
但 git 回傳訊息:
fatal: More than one commit to dig from: origin/HEAD and HEAD?
我認為問題在于我試圖在遠程而不是主分支上記錄提交,但這只是一種猜測。我該如何解決?
uj5u.com熱心網友回復:
行日志功能(git log -L)的檔案說:
-L<start>,<end>:<file>
-L:<funcname>:<file>跟蹤由
<start>,<end>或函式名 regex<funcname>在<file>. 您不得提供任何路徑規范限制器。這目前僅限于從單個修訂開始的遍歷,即,您只能給出零或一個正修訂引數,并且<start>和<end>(或<funcname>)必須存在于起始修訂中。[...]
請注意,冒號和檔案名之間沒有空格,因此您的命令應該是:
git log -L149,149:doc/examples/encode_video.c -1 c5079bf3bccd24bf8ed45ff47ff4071fd09e9fd8..HEAD --remotes
使用此語法,我會收到與您相同的錯誤訊息。該檔案指出,行日志功能僅限于從單個修訂開始的修訂遍歷。在這里,您提供了一個范圍 ( c5079bf3bccd24bf8ed45ff47ff4071fd09e9fd8..HEAD) 以及--remotes引數,其檔案說:
假裝所有 refs
refs/remotes都在命令列上列為<commit>.
因此,您根本沒有對 進行單個修訂git log,因此會出現錯誤訊息。
現在嘗試獲得您正在尋找的答案。git log不與服務器對話,因此如果您沒有在本地進行所有提交(例如,您正在使用舊克隆),您應該git fetch首先,正如 joanis 指出的那樣。
然后,您可以先查看所有涉及您感興趣的檔案的提交,以及您c5079bf3bccd24bf8ed45ff47ff4071fd09e9fd上次獲取它時 master 分支指向的內容:
$ git log --oneline c5079bf3bccd24bf8ed45ff47ff4071fd09e9fd8..origin/master doc/examples/encode_video.c
1698cd8422 doc/examples/encode_video: add explanations in comments.
好的,有一個提交觸及該檔案。我們來看看它的內容:
$ git show 1698cd8422 | head -20
commit 1698cd8422c8a363e25dd94beb61c0a6d68bd67c
Author: Nicolas George <[email protected]>
Date: Mon Aug 16 15:05:59 2021 0200
doc/examples/encode_video: add explanations in comments.
diff --git a/doc/examples/encode_video.c b/doc/examples/encode_video.c
index 908eb203d5..939ed68324 100644
--- a/doc/examples/encode_video.c
b/doc/examples/encode_video.c
@@ -155,12 155,25 @@ int main(int argc, char **argv)
for (i = 0; i < 25; i ) {
fflush(stdout);
- /* make sure the frame data is writable */
/* Make sure the frame data is writable.
On the first round, the frame is fresh from av_frame_get_buffer()
and therefore we know it is writable.
But on the next rounds, encode() will have called
avcodec_send_frame(), and the codec may have kept a reference to
好的,所以第一個塊從第 155 行開始。所以這是您查詢的答案:c5079bf3bccd24bf8ed45ff47ff4071fd09e9fd8..origin/HEAD在檔案中觸及第 149 行的范圍內沒有提交doc/examples/encode_video.c。
在嘗試更多之后進行編輯,似乎行日志功能確實支持給定一個范圍。所以這個呼叫會給你同樣的答案:
git log -L149,149:doc/examples/encode_video.c -1 c5079bf3bccd24bf8ed45ff47ff4071fd09e9fd8..origin/HEAD
該命令不回傳任何內容,因為如上所述,該范圍內沒有提交修改該檔案中的第 149 行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/493532.html
標籤:混帐 ffmpeg 混帐差异 git-remote 混帐日志
