根據我的經驗,當我重命名檔案時,git 會在我的下一次提交時檢測到重命名。但是,現在我想重命名一個檔案,比如從old_name到new_name,并且在同一個提交中,我想創建一個名為old_name的新檔案。由于存在一個名為old_name的(不同的)檔案,git 不會自動檢測這實際上是一個重命名。有沒有辦法強制 git 檢測這個重命名?
到目前為止,我還沒有使用過,git mv因為我聽說它與通過任何普通方法重命名幾乎相同,但這對我的情況有幫助嗎?
我可以看到 git 沒有通過運行檢測重命名commit -a --dry-run;它將它列為一個新檔案和一個修改過的檔案。
即使我能夠強制提交檢測重命名,當我嘗試通過重命名跟蹤代碼時,這是否會導致任何問題git log --follow?
uj5u.com熱心網友回復:
Git 中并沒有真正的重命名之類的東西。Git 對重命名檔案的概念一無所知。沒有關于任何此類事情的資訊內置于提交或其他任何地方。的使用git mv與此事完全無關。
Git 所做的就是試圖幫助你,人類,在兩次提交之間進行差異時,通過注意兩個具有不同路徑名的檔案是否看起來是“同一個檔案”——也就是說,一個檔案被洗掉并且一個檔案被創建,并且它們似乎具有非常相似的內容。
因此,如果您想幫助 Git 幫助您,請進行完全由重命名檔案組成的提交。然后進行另一個提交,在其中創建一個具有舊名稱的新檔案。因此,當 Git 遍歷父鏈時,一次提交一個,它將更有可能在每一步得出“正確”的結論。
但是,一般來說,您不應該指望 Git 的這種行為。
這是一個示例,我在一個提交中重命名a為c,然后a在另一個提交中創建了一個新的。我將顯示log清單的摘錄,以便您可以看到 Git 認為在每次提交中發生了什么:
% git log -p
diff --git a/a b/a
new file mode 100644
index 0000000..b680253
--- /dev/null
b/a
diff --git a/a b/c
similarity index 100%
rename from a
rename to c
diff --git a/b b/b
new file mode 100644
index 0000000..6178079
--- /dev/null
b/b
diff --git a/a b/a
new file mode 100644
index 0000000..7898192
--- /dev/null
b/a
如您所見,向后閱讀,Git 認為我執行了以下步驟:
- 創建
a. - 創建
b. - 重命名
a為c. - 創建
a.
這正是我認為我所做的,所以 Git 在這里以所需的方式“有幫助”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/491532.html
