欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用DeepSeek實(shí)現(xiàn)復(fù)雜Git操作的詳細(xì)過程

 更新時(shí)間:2025年02月07日 10:16:35   作者:安冬的碼畜日常  
今天綜合利用 DeepSeek V3 和 R1 推理模型,成功解決了一個(gè)復(fù)雜的 Git 操作,謹(jǐn)以此文記錄 DeepSeek 使用心得,以備后續(xù)復(fù)盤,下面是小編給大家介紹的利用DeepSeek實(shí)現(xiàn)復(fù)雜Git操作的詳細(xì)過程,需要的朋友可以參考下

1 背景介紹

今天綜合利用 DeepSeek V3R1 推理模型,成功解決了一個(gè)復(fù)雜的 Git 操作,謹(jǐn)以此文記錄 DeepSeek 使用心得,以備后續(xù)復(fù)盤。這本是我一次操作上的疏漏,未能將 Fork 到本地的代碼與原項(xiàng)目徹底脫鉤,直到很晚才發(fā)現(xiàn)問題,已經(jīng)很難快速用簡(jiǎn)單的 Git 命令恢復(fù)原樣了。于是,我想到了 DeepSeek。

2 需求描述

現(xiàn)有一個(gè)從 GitHub 復(fù)刻(fork)到我本地的開源項(xiàng)目。從復(fù)刻到本地那天起,我又陸續(xù)在 main 分支提交了很多次(沒有其他分支)?,F(xiàn)在需要將我本人提交的所有節(jié)點(diǎn)從該副本完整遷移到另一個(gè)新倉(cāng)庫(kù),并要求保留所有節(jié)點(diǎn)的歷史提交記錄(提交時(shí)間、注釋信息等)。

圖 0:遷移 Git 子版本樹的需求描述示意圖

【圖 0:遷移 Git 子版本樹的需求描述示意圖】

3 思路分析

該需求涉及從原 Git 庫(kù)徹底剝離需要的子版本樹。Git 還沒有能一步實(shí)現(xiàn)節(jié)點(diǎn)樹 “脫鉤” 的操作命令。但大方向是明確的,無非以下四步 ——

  • 先找到脫鉤位置(簡(jiǎn)單);
  • 從脫鉤點(diǎn)產(chǎn)生一個(gè)新的 Git 根節(jié)點(diǎn)(未知);
  • 設(shè)法將脫鉤點(diǎn)后續(xù)產(chǎn)生的提交版本依次追加到新的根節(jié)點(diǎn)上(未知);
  • 最后刪除原有版本樹,重置遠(yuǎn)程推送分支 origin(簡(jiǎn)單);

以上四步邏輯關(guān)系清晰,正好可以用 DeepSeek 一試身手。

4 實(shí)現(xiàn)過程

4.1 第一次需求確認(rèn)

因?yàn)樯婕岸啻螐?fù)雜 Git 操作,先用 V3 網(wǎng)頁(yè)版直接提問(刻意未加任何提示詞技巧):

我有一個(gè)本地 Git 代碼倉(cāng)庫(kù),是從 GitHub 一個(gè)開源項(xiàng)目上 fork 到本地的,但這樣產(chǎn)生的提交不計(jì)入 GitHub 網(wǎng)站的個(gè)人貢獻(xiàn),因此我在提交了很多本地新增的版本后決定將其剝離出來。但我不知道應(yīng)該怎么操作。幫幫我

以下是整理后的 DeepSeek V3 的回復(fù),可以看到 V3 模型第一次理解有偏差:

要將本地 Git 倉(cāng)庫(kù)從 GitHub 的 fork 中剝離出來,使其成為一個(gè)獨(dú)立的倉(cāng)庫(kù),并保留所有提交歷史,可以按照以下步驟操作:

# 1. 備份當(dāng)前倉(cāng)庫(kù)
# 2. 移除與上游倉(cāng)庫(kù)的關(guān)聯(lián):
cd /path/to/your/repo
git remote remove origin
# 3. 創(chuàng)建新的 GitHub 倉(cāng)庫(kù)(不要初始化 README 或 .gitignore)
# 4. 將本地倉(cāng)庫(kù)關(guān)聯(lián)到新倉(cāng)庫(kù):
git remote add origin https://github.com/yourusername/new-repo-name.git
# 5. 推送代碼到新倉(cāng)庫(kù):
git push -u origin --all
git push -u origin --tags
# 6. 確保本地分支跟蹤新的遠(yuǎn)程分支:
git branch --set-upstream-to=origin/main main

要是按上述回復(fù)進(jìn)行操作,其實(shí)只是把遠(yuǎn)程分支更新到了新倉(cāng)庫(kù),完全沒有實(shí)現(xiàn)想要的“脫鉤”效果。

4.2 第二次需求確認(rèn)

繼續(xù)追問:

如果只想保留部分提交歷史,比如只有我自己的提交歷史,又該如何?

這次它聽懂了,但給出的方案是借助第三方工具(由于不是理想回復(fù),具體內(nèi)容已精簡(jiǎn)):

# 1. 安裝 `git filter-repo`
pip install git-filter-repo
# 2. 為避免直接操作原始倉(cāng)庫(kù),建議先備份
git clone /path/to/your/repo new-repo
cd new-repo
# 3. 通過以下命令保留只有你提交的歷史:
git filter-repo --commit-callback '
if b"your-username" not in commit.committer_email:
    commit.skip()
'
# 4. 清理遠(yuǎn)程信息
git remote remove origin
# 5. 創(chuàng)建新的 GitHub 倉(cāng)庫(kù) new-repo-name
# 6. 關(guān)聯(lián)新倉(cāng)庫(kù)并推送
git remote add origin https://github.com/your-username/new-repo-name.git
git push -u origin --all
git push -u origin --tags
# 7. 效果驗(yàn)證(略)

由于需要安裝第三方依賴,解決方案的可移植性較差。因此還需繼續(xù)追問。

4.3 第三次需求確認(rèn)

由于我想要的是 Git 原生命令,因此再次追問:

我不想安裝第三方工具,Git 沒有原生方法實(shí)現(xiàn)嗎?

這次它終于聽懂了,想到了孤立分支(--orphan)和 cherry-pick 節(jié)點(diǎn)提取命令 ——

如果你不想安裝第三方工具(如 git filter-repo),Git 本身也提供了原生方法來實(shí)現(xiàn)部分提交歷史的保留,但操作會(huì)稍微復(fù)雜一些。以下是使用 Git 原生命令實(shí)現(xiàn)的方法:

# 1. 克隆你的本地倉(cāng)庫(kù)
git clone /path/to/your/repo new-repo
cd new-repo
# 2. 創(chuàng)建一個(gè)新的分支
git checkout --orphan new-branch
# 3. 篩選并重新提交你的更改
# 從提交歷史篩選想要的提交哈希值:
git log --author="your-username" --oneline
# 逐個(gè)挑選提交
git cherry-pick <commit-hash>
# 如果需要挑選多個(gè)提交,可以將哈希值列出來:
git cherry-pick <commit-hash-1> <commit-hash-2> <commit-hash-3>
# 4. 清理舊分支
git branch -D main  # 刪除舊的主分支
git branch -m new-branch main  # 將新分支重命名為主分支
# 5. 清理舊的遠(yuǎn)程分支
git remote remove origin
# 6. 創(chuàng)建新的 GitHub 倉(cāng)庫(kù)
# 7. 關(guān)聯(lián)新倉(cāng)庫(kù)并推送
git remote add origin https://github.com/your-username/new-repo-name.git
git push -u origin main
# 8. 驗(yàn)證

這里 DeepSeek 還漏掉了一個(gè)關(guān)鍵細(xì)節(jié):cherry-pick 在遇到多個(gè) commit 版本時(shí)需要嚴(yán)格遵守先后順序。在我進(jìn)一步的提示下,它才補(bǔ)全了這部分內(nèi)容,并且給出了發(fā)生沖突時(shí)的解決方案,但比較官方:

如果在挑選提交時(shí)發(fā)生沖突:

Git 會(huì)暫停挑選過程,并標(biāo)記沖突文件。

手動(dòng)解決沖突后,使用以下命令繼續(xù):

git add <resolved-files>
git cherry-pick --continue

如果你想跳過當(dāng)前提交(例如沖突無法解決),可以使用:

git cherry-pick --skip

如果你想取消整個(gè)挑選過程,可以使用:

git cherry-pick --abort

4.4 V3 模型:中間結(jié)果的處理

由于 git log 命令得到的 commit 順序是從新到舊,與 cherry-pick 相反,因此可以讓 DeepSeek 幫我獲取正確排序的哈希列表。這類簡(jiǎn)單任務(wù) V3 完成得很好:

# 1. 逆序輸出提交歷史
git log --reverse
# 2. 篩選指定日期之后的提交
git log --since="2024-09-13 00:00:00"
# 3. 只保留哈希值
git log --pretty=format:"%H"
# 4. 組合命令
git log --since="2024-09-13 00:00:00" --reverse --pretty=format:"%H"
# 5. 解釋參數(shù)
# --since="2024-09-13 00:00:00":篩選出指定日期之后的提交。
# --reverse:將提交歷史從最舊到最新排列。
# --pretty=format:"%H":只輸出提交的哈希值。

為了節(jié)省時(shí)間,我將最后的 PowerShell 命令作了進(jìn)一步格式化處理,只保留 SHA1 哈希值的前八位,并用空格進(jìn)行分隔:

(git log --since="2024-09-13 00:00:00" --reverse --pretty=format:"%H" | % { $_.Substring(0, 8) }) -join " "

4.5 方案驗(yàn)證,首戰(zhàn)告捷

然后按照最后一次需求確認(rèn)的結(jié)果,嘗試用 --orphan + cherry-pick 來實(shí)現(xiàn):

# 備份到新文件夾,再行處理
> git clone F:\Courses\Postman2\ newRepo
Cloning into 'newRepo'...
done.
> cd newRepo
# 獲取待遷移節(jié)點(diǎn)列表(從早到晚排序)
> $tmp = (git log --since="2024-09-13 00:00:00" --reverse --pretty=format:"%H" | % { $_.Substring(0, 8) }) -join " "
# 從 main 分支切到孤立分支 master
> git checkout --orphan master
# 移除暫存區(qū)(stage)內(nèi)的所有提交內(nèi)容
> git rm --cached *

最后這步是為了清空當(dāng)前工作區(qū)內(nèi)的無關(guān)變更,以便執(zhí)行 git cherry-pick 命令:

圖 1:切到孤立分支 master 后,移除暫存區(qū)(stage)內(nèi)的所有提交內(nèi)容

【圖 1:切到孤立分支 master 后,移除暫存區(qū)(stage)內(nèi)的所有提交內(nèi)容】

之后就可以刪除工作區(qū)內(nèi)的冗余內(nèi)容了(除了 .git 文件夾保留,其余均可刪除):

# 查看當(dāng)前待刪文件(夾)
> git status -s
?? LICENSE
?? README.md
?? code/
?? notes/
> rm -Recurse -Force LICENSE,code,notes,README.md

圖 2:清空工作區(qū)內(nèi)的所有無關(guān)內(nèi)容

【圖 2:清空工作區(qū)內(nèi)的所有無關(guān)內(nèi)容】

然后就可以放心執(zhí)行 git cherry-pick 了:

# 批量執(zhí)行節(jié)點(diǎn)遷移
> $tmp
3b2de1fe e8f40cf3 1b02df31 00988a80 b0718962 a29d52c5 71ccc45b 1b0c9af2 24f0bdf5 d77cf64b c6be7f0b a0284fa4 bd0b88f3 3c548a07 e713024c 3b792f58 e29381e8 8cff3c5b 2ae4c28d 11887a88 254d26c7 125356db e6fead8b 2413c3b7 bfdf3bee
> git cherry-pick 3b2de1fe e8f40cf3 1b02df31 00988a80 b0718962 a29d52c5 71ccc45b 1b0c9af2 24f0bdf5 d77cf64b c6be7f0b a0284fa4 bd0b88f3 3c548a07 e713024c 3b792f58 e29381e8 8cff3c5b 2ae4c28d 11887a88 254d26c7 125356db e6fead8b 2413c3b7 bfdf3bee
# ...
error: could not apply 3b2de1f... Init my own repo. Added translation folder
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run
hint: "git cherry-pick --continue".
hint: You can instead skip this commit with "git cherry-pick --skip".
hint: To abort and get back to the state before "git cherry-pick",
hint: run "git cherry-pick --abort".
hint: Disable this message with "git config advice.mergeConflict false"
> 

但是按默認(rèn)的合并方式,會(huì)得到很多沖突報(bào)錯(cuò),中斷命令:

圖 3:批量執(zhí)行 cherry-pick 后出現(xiàn)一堆沖突文件

【圖 3:批量執(zhí)行 cherry-pick 后出現(xiàn)一堆沖突文件】

此時(shí)只需要用 git add * 命令直接將其標(biāo)記為已解決,就能繼續(xù)了:

圖 4:手動(dòng)處理沖突內(nèi)容,并繼續(xù) git cherry-pick 操作

【圖 4:手動(dòng)處理沖突內(nèi)容,并繼續(xù) git cherry-pick 操作】

接著,Git 會(huì)自動(dòng)彈出本輪 操作的提交注釋頁(yè),詢問是否需要修改注釋內(nèi)容。這里無需修改,直接關(guān)閉即可:

圖:5:批量操作后的提交界面(無需修改,直接關(guān)閉即可)

【圖:5:批量操作后的提交界面(無需修改,直接關(guān)閉即可)】

最后,再用 gitk --all 命令查看版本樹,新的子版本樹就誕生了:

圖 6:利用 gitk --all 查看當(dāng)前所有版本樹,新的子樹(上方)已經(jīng)生成完畢,且歷史提交日期不變

【圖 6:利用 gitk --all 查看當(dāng)前所有版本樹,新的子樹(上方)已經(jīng)生成完畢,且歷史提交日期不變】

處理完最復(fù)雜的兩步后,剩下的都是些簡(jiǎn)單的收尾工作:

# 刪除本地舊分支 main
> git branch -D main
Deleted branch main (was bfdf3be).
# 刪除遠(yuǎn)程跟蹤分支 origin
> git remote remove origin
# 分支 master 重命名為 main
> git branch -m master main
# 新建目標(biāo)倉(cāng)庫(kù),重置遠(yuǎn)程跟蹤分支
> git remote add origin git@github.com:SafeWinter/learn-postman2.git
# 推送到遠(yuǎn)程倉(cāng)庫(kù)
> git push -u origin main

這樣就實(shí)現(xiàn)了 Git 子版本樹的完整遷移:

final repo snapshot

5 總結(jié)復(fù)盤

上述操作過程看似一氣呵成,其實(shí)中途有很多次微調(diào)沒有記錄,這里略作復(fù)盤:

  1. DeepSeek 延續(xù)了 “遇強(qiáng)則強(qiáng)” 的大模型風(fēng)格,要想得到滿意的答復(fù),提問者除了精準(zhǔn)描述問題外,還需要對(duì)相關(guān)領(lǐng)域有扎實(shí)的基礎(chǔ);否則 DeepSeek 只會(huì)跟著你的思路,無法立即看出問題的根源所在;
  2. 一旦需求明確后,DeepSeek 往往能很快提供準(zhǔn)確回復(fù),且該方案準(zhǔn)確率極高(--orphan + cherry-pick 組合);這種感覺就像是在和付費(fèi)版 ChatGPT 4x 對(duì)話,但又是完全免費(fèi)使用,非常震撼;
  3. 務(wù)必重視 R1 模型的推理過程,這是后續(xù)大幅提高準(zhǔn)確率的關(guān)鍵。R1 模型會(huì)將當(dāng)前會(huì)話的歷史記錄全部導(dǎo)入推理過程,十分智能;
  4. 建議大家還是多用網(wǎng)頁(yè)或手機(jī)版 DeepSeek,能在本地部署的都是完整模型的蒸餾版,雖然無需聯(lián)網(wǎng)交流,但表現(xiàn)是大打折扣的;與其跟風(fēng)“大煉鋼鐵”,不如多用 DeepSeek 解決一些實(shí)際問題;
  5. 本文介紹的版本樹剝離方案還存在一個(gè)問題:各歷史節(jié)點(diǎn)的提交時(shí)間和作者修改不一致——前者為當(dāng)前操作時(shí)間,后者為歷史記錄時(shí)間 1。要讓提交時(shí)間也回歸到歷史節(jié)點(diǎn),只能從歷史節(jié)點(diǎn)中提取提交時(shí)間,然后逐一提交。但這樣的單獨(dú)處理,只要存在對(duì)原內(nèi)容的修改,當(dāng)次 cherry-pick 操作就會(huì)中斷,且必須手動(dòng)處理內(nèi)容沖突,DeepSeek 暫時(shí)無法給出包含手動(dòng)處理版本沖突的自動(dòng)化腳本,只能給出沒有中斷的情況下每次遷移的自動(dòng)化腳本(如下所示)。要實(shí)現(xiàn)徹底自動(dòng)化,還需要提問者自身對(duì) bash 腳本或 PowerShell 腳本有相當(dāng)程度的透徹理解。
# runcommit.ps1
param(
    [Parameter(Mandatory=$true, Position=0)]
    [string]$CommitHash
)

# 獲取作者日期和提交日期
$AUTHOR_DATE = git show -s --format=%aI $CommitHash
$COMMITTER_DATE = git show -s --format=%cI $CommitHash

# 設(shè)置環(huán)境變量
$env:GIT_AUTHOR_DATE = $AUTHOR_DATE.Trim()
$env:GIT_COMMITTER_DATE = $COMMITTER_DATE.Trim()

# 執(zhí)行 cherry-pick
git cherry-pick --keep-redundant-commits --allow-empty $CommitHash
# 運(yùn)行方法:.\runcommit.ps1 commit_SHA_value (Enter)

該問題在瀏覽器查看歷史提交記錄時(shí)才會(huì)出現(xiàn),GitHub 目前只能按實(shí)際提交時(shí)間排序,而 Gitee 則可以選擇排序方式。相比之下,國(guó)產(chǎn)的 Git 托管平臺(tái)在展示歷史提交方面更有優(yōu)勢(shì)。

以上就是利用DeepSeek實(shí)現(xiàn)復(fù)雜Git操作的詳細(xì)過程的詳細(xì)內(nèi)容,更多關(guān)于DeepSeek實(shí)現(xiàn)Git操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于Python和Java實(shí)現(xiàn)單詞計(jì)數(shù)(Word Count)

    基于Python和Java實(shí)現(xiàn)單詞計(jì)數(shù)(Word Count)

    Spark框架也是MapReduce-like模型,采用“分治-聚合”策略來對(duì)數(shù)據(jù)分布進(jìn)行分布并行處理,本文就來利用Spark實(shí)現(xiàn)單詞統(tǒng)計(jì)的功能,需要的可以參考一下
    2023-05-05
  • win10 + anaconda3 + python3.6 安裝tensorflow + keras的步驟詳解

    win10 + anaconda3 + python3.6 安裝tensorflow + keras的步驟詳解

    這篇文章主要介紹了win10 + anaconda3 + python3.6 安裝tensorflow + keras的步驟,需要的朋友可以參考下
    2019-09-09
  • Git中tag標(biāo)簽的使用教程

    Git中tag標(biāo)簽的使用教程

    這篇文章介紹了Git中tag標(biāo)簽的使用教程,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • BeyondCompare4下載安裝使用超詳細(xì)步驟

    BeyondCompare4下載安裝使用超詳細(xì)步驟

    使用BeyondCompare只需使用簡(jiǎn)單而強(qiáng)大的命令和操作,即可開啟最優(yōu)質(zhì)的對(duì)比體驗(yàn),找出您感興趣的差異,合并變化,然后同步文件,并生成報(bào)告,對(duì)此感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • 5個(gè)Linux平臺(tái)程序員最愛的開發(fā)工具匯總

    5個(gè)Linux平臺(tái)程序員最愛的開發(fā)工具匯總

    這篇文章主要介紹了5個(gè)Linux平臺(tái)程序員最愛的開發(fā)工具匯總,程序最重要的工具就是源碼編輯器了,或者是一個(gè)全能的IDE,本文就羅列了5個(gè)Linux平臺(tái)最常用的編輯給大家,需要的朋友可以參考下
    2014-09-09
  • 二維碼的生成細(xì)節(jié)和原理

    二維碼的生成細(xì)節(jié)和原理

    本篇文章主要介紹二維碼,二維碼大家都很熟悉,但是二維碼是如何生成的并不了解,對(duì)二維碼感興趣的小伙伴可以看下本篇文章
    2016-07-07
  • 使用Ollama服務(wù)監(jiān)聽0.0.0.0地址

    使用Ollama服務(wù)監(jiān)聽0.0.0.0地址

    本文介紹了如何配置Ollama以監(jiān)聽0.0.0.0地址,使其能夠接受來自任何網(wǎng)絡(luò)接口的連接,并驗(yàn)證配置是否生效,同時(shí),也提醒了在進(jìn)行此操作時(shí)應(yīng)注意的安全風(fēng)險(xiǎn)
    2025-02-02
  • nGrinder性能工具源碼安裝部署過程

    nGrinder性能工具源碼安裝部署過程

    nGrinder是NHN公司用Java語(yǔ)言開發(fā)的一款的基于Grinder開發(fā)的開源B/S Web性能測(cè)試平臺(tái),具有友好簡(jiǎn)潔的用戶界面和分布式測(cè)試功能,本文給大家分享nGrinder性能工具源碼安裝部署過程,一起看看吧
    2021-05-05
  • MAC快速本地部署Deepseek的實(shí)現(xiàn)步驟

    MAC快速本地部署Deepseek的實(shí)現(xiàn)步驟

    本文介紹了在Mac上快速本地部署Deepseek大語(yǔ)言模型,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • GitHub Eclipse配置使用教程詳解

    GitHub Eclipse配置使用教程詳解

    本文主要介紹GitHub Eclipse,這里對(duì)Eclipse 使用GitHub的教程,圖文并茂詳細(xì)說明如何操作,有需要的小伙伴可以參考下
    2016-09-09

最新評(píng)論