簡體   English   中英

Git 拉取而不覆蓋文件

[英]Git pull without overwriting files

我有一個項目,但有些文件很大,在/data/guilds/* ,我沒有提交。

我怎樣才能 git pull 以獲取所有最新代碼的方式,但不刪除不存在的文件? /data/guilds在實際源中不存在,因此在拉取時不應受到影響。

當我嘗試 git pull 時,我得到了這個:

error: Your local changes to the following files would be overwritten by merge:
        data/guilds/500785463624335390.json
        data/guilds/611278159555461180.json
        data/guilds/684492926528651336.json
        data/guilds/753312192165838938.json
        data/stats.json

可能不會提交這些文件,但有人提交. 他們在一些提交中。 特別是,它們存在於您要求 Git 合並的提交中。

如果你想避免使用它們,首先避免git pull ,因為這意味着運行git fetch ,然后運行第二個 Git 命令 第二個命令由您決定,但通常必須是git mergegit rebase 如果你不自己做出選擇——明確地或通過設置你自己的默認值——Git 將使用的默認值是運行git merge

git merge命令使用三個提交:

  • 合並基礎提交,其中包含您和他們(無論“他們”是誰,提供新提交)在您開始時擁有的所有文件;
  • 你當前的提交,從你當前分支的頂端開始;
  • 他們最近的提交,你告訴你自己的 Git 合並。

在這種情況下,發生的事情是有人——無論是誰提交了你要求 Git 合並的提交——從那個共同的起點開始將這些文件添加為新文件。 您尚未將它們添加到您的提交中,但他們已將它們添加到了他們的.

讓 Git 結合你當前提交的狀態——缺少這些文件; 他們只是在你的工作樹中,而不是在你當前的提交中——他們的工作要求 Git 從頭開始​​創建這些文件,其中包含你告訴 Git 合並的提交中存在的數據。 如果 Git 這樣做,這將清除那些未跟蹤的文件,用您要求 Git 合並的提交中的跟蹤文件替換它們。

您可以按照 Git 的建議(您在此處剪下)提交這些文件或將它們移開,但這可能不是正確的做法。 對您來說不幸的是,沒有一件正確的事情可以做。 你可能不得不做一些錯誤的事情,就像它一樣。 😀

同樣,這里問題的根源是有人提交了這些文件 任何現有提交的任何部分都不能更改:不能由您,不能由其他相關人員,也不能由 Git 本身更改。 因此,如果您不想使用這些文件,則不能使用這些提交,至少不能直接使用。

好消息是:您不必使用這些提交。 只是讓那些比提交更好一些其他的提交。 改用這些新的和改進的提交。

壞消息是,要進行這些新的和改進的提交,您需要另一個地方工作,或者您需要將當前的數據文件移開,因為您無法直接處理提交。 所有提交都以一種特殊的、只讀的、僅限 Git 的格式存儲,這種格式對於執行任何實際工作毫無用處。 出於這個原因,Git 沒有讓您直接處理提交。 相反,Git 將提交提取到一個工作樹中,在那里你有文件,而不是提交。 您可以使用文件。 文件讓您完成工作。 (提交沒有。)所以你可以接受其他人提交的包含這些文件的其他提交,並將所有這些文件提取到一個工作樹中。

如果您將這些文件提取到您自己的主工作樹中,這顯然會破壞您當前的文件。 因此,要么將它們保存在當前(主)工作樹之外的某個位置,要么在您自己的主工作樹之外的某個位置執行此工作:

  • 您可以在一個新的克隆中完成這項工作,它是一個單獨的克隆,它將擁有自己的工作樹、自己的分支、自己的origin等。

  • 或者,您可以使用git worktree add添加位於新分支上的新工作樹 這在某些方面稍微復雜一些,在其他方面稍微簡單一些。

在任何情況下,一旦你有一個區域,在其中工作,你可以與他們的承諾,解決它,以便它缺少數據文件,它應該缺乏,使得從組文件的一個新的承諾,開始和你現在有新修訂版本添加到他們的分支,它是適用於使用git merge ,這樣就可以合並承諾您的分支。

請注意,這並不能修復他們自己的錯誤。 他們的提交,包含這些文件,仍然存在。 無論他們是誰,您都需要他們來獲取忽略這些數據文件的新更改。 當他們選擇它時,此更改將刪除他們的數據文件! 他們將需要恢復它們——也許是從有它們的提交中恢復——並開始按照你的方式工作,將這些作為他們不添加和提交的未跟蹤文件。

為了確保他們將來不會再次添加和提交這些數據文件,一旦他們修復了錯誤,他們(和您)可以使用.gitignore文件。 這不會修復任何舊的提交! 舊的提交無法修復 任何現有提交的任何部分都不能更改。 你和他們可以簡單地避免使用舊的提交。

暫無
暫無

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

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