git常見沖突場景及解決辦法

場景1.假設一開始 本地拉取了遠程最新的代碼 就是說本地和遠程此時一樣 然后本地寫了一個新需求git commit了 但是沒有提交到遠程倉庫 然后另外一個地方提交了某個功能的新代碼 到遠程 此時本地和遠程的代碼不一樣了 而且本地有已經 commit的 這時候 這個本地想同步遠程的最新代碼 應該怎么做。

當本地有已提交(commit)但未推送(push)的代碼,且遠程倉庫已有新提交時,需要將遠程最新代碼同步到本地并與本地代碼合并,具體步驟如下:

當本地有已提交(commit)但未推送(push)的代碼,且遠程倉庫已有新提交時,需要將遠程最新代碼同步到本地并與本地代碼合并,具體步驟如下:

步驟 1:確保本地工作區干凈

首先確認本地所有修改都已提交(你已經完成了這一步),可以通過?git status?檢查,確保輸出顯示 "nothing to commit, working tree clean"。

步驟 2:拉取遠程最新代碼(fetch)

先獲取遠程倉庫的最新代碼到本地的遠程跟蹤分支(如?origin/main?或?origin/master),但不直接合并到本地分支:

bash

git fetch origin

  • 作用:更新本地存儲的遠程倉庫信息,讓你知道遠程有哪些新提交,但不會影響你的本地工作分支。

步驟 3:合并遠程代碼到本地分支(merge)

將遠程最新代碼(如?origin/main)合并到你的本地當前分支(如?main):

bash

git merge origin/main

  • 此時 Git 會嘗試自動合并遠程代碼和你的本地提交。

步驟 4:處理可能的合并沖突(若有)

如果遠程代碼和你的本地提交修改了同一部分內容,會出現合并沖突,此時:

  1. 終端會提示哪些文件有沖突。
  2. 打開沖突文件,會看到類似以下標記的沖突內容:

    plaintext

    <<<<<<< HEAD  # 你的本地代碼
    你的本地修改內容
    =======
    遠程倉庫的修改內容
    >>>>>>> origin/main  # 遠程代碼
    
  3. 根據實際需求編輯文件,保留正確的代碼,刪除沖突標記(<<<<<<<=======>>>>>>>)。
  4. 解決完所有沖突后,標記文件為已解決,并完成合并提交:

    bash

    git add <沖突文件路徑>  # 標記沖突已解決
    git commit  # 提交合并結果(無需額外消息,Git會自動生成合并提交信息)
    

步驟 5:推送本地代碼到遠程(可選)

合并完成后,本地分支就包含了遠程最新代碼和你的本地提交,此時可以推送到遠程:

bash

git push origin main

總結流程

bash

# 1. 確認本地已提交所有修改(已完成)
git status# 2. 獲取遠程最新代碼
git fetch origin# 3. 合并遠程代碼到本地
git merge origin/main# 4. 若有沖突,解決后提交
# git add <沖突文件>
# git commit# 5. 推送本地代碼到遠程(可選)
# git push origin main

通過以上步驟,既能同步遠程最新代碼,又能保留本地已提交的新需求,最終形成一個包含雙方修改的完整分支。

提示:git中的沖突

沖突是否會發生,取決于本地提交和遠程新提交是否修改了「同一文件的同一部分內容」,和功能是否相關無關。

具體來說:
如果你的本地提交與遠程新提交:

  • 修改的是完全不同的文件?→ 不會有沖突,Git 會自動合并(把兩邊的文件都保留)。
  • 修改的是同一個文件,但修改的是不同的代碼段(比如你改了文件的第 10 行,遠程改了第 20 行) → 也不會有沖突,Git 會自動把兩邊的修改拼合到一起。
  • 修改的是同一個文件的「同一部分內容」(比如你和遠程都改了文件的第 10-15 行) → 才會產生沖突,需要手動解決。

舉個例子:
假設遠程倉庫有一個?app.js?文件,你拉取后本地提交了一個新功能(修改了?user.js?文件),而同時遠程倉庫有人提交了一個修改(修改了?order.js?文件)。這種情況下,你執行?git merge origin/main?時,Git 會自動把?order.js?的遠程修改合并到本地,不會有任何沖突,因為兩邊改的是不同文件。

所以結論是:只有當兩邊修改了同一文件的重疊部分時才會沖突,如果是完全無關的代碼(不同文件或同一文件的不同位置),Git 能自動處理合并,不會有沖突。

場景二:本地拉取了遠程倉庫的最新代碼 但什么都沒動 只是拉取了 然后另外一個地方提交了新功能的代碼到遠程 此時遠程和本地是一樣的 那本地是否可以直接執行git pull?xxx?

是的,這種情況直接執行?git pull?即可順利拉取遠程最新更新。

具體來說,當本地滿足兩個條件:

  1. 工作區干凈(沒有未提交的修改,git status?顯示 “nothing to commit”);
  2. 本地分支與遠程分支在你上次拉取后沒有本地新提交(即本地分支和你上次拉取的遠程狀態完全一致);

此時遠程有新提交后,執行?git pull?會自動完成兩個操作:

  • 先執行?git fetch?獲取遠程最新代碼;
  • 再自動執行?git merge?將遠程新提交合并到本地分支。

由于本地沒有任何修改或新提交,合并過程不會有沖突(Git 只需要把遠程的新提交 “疊加” 到本地分支上),整個過程會自動完成,無需手動處理沖突。

所以這種場景下,git pull?是最簡單直接的同步遠程最新代碼的方式。

場景三:如果本地拉取了遠程最新的代碼?比如有一行代碼一開始s="123" 本地改了一行s="456" 但是沒commit 也沒add 然后另外一個地方也修改了s="123" 修改為 s="789"然后提交到遠程了 那此時本地應該怎么做 是不是會沖突 即使本地沒commit 也沒add?

這種情況會產生沖突,但沖突不會直接在?git pull?時爆發,而是需要你先處理本地未提交的修改,否則 Git 會阻止你拉取遠程代碼。

具體原因:

你的本地修改(s="456")停留在工作區(未?add?也未?commit),而遠程倉庫已經有了新提交(s="789")。兩者修改的是同一文件的同一行內容(都是對?s?變量的修改),基于同一個基礎版本(初始?s="123"),因此本質上是沖突的。

但 Git 會先檢查你的工作區是否 “干凈”—— 由于你有未提交的修改,直接執行?git pull?會失敗,終端會提示類似:
error: Your local changes to the following files would be overwritten by merge: xxx.py
(意思是:拉取遠程代碼會覆蓋你本地的未提交修改,因此被阻止)。

正確處理步驟:

步驟 1:暫存本地未提交的修改

用?git stash?將工作區的修改暫時 “儲藏” 起來,讓工作區恢復到干凈狀態(與上次提交一致):

bash

git stash

  • 作用:保存本地未?add/commit?的修改,同時清空工作區,方便后續拉取遠程代碼。
步驟 2:拉取遠程最新代碼

此時工作區干凈,可以安全拉取遠程的新提交(s="789"):

bash

git pull origin main  # 假設遠程分支是 main

  • 拉取后,本地分支會更新為遠程的最新狀態(s="789")。
步驟 3:恢復本地暫存的修改并處理沖突

將之前?stash?的本地修改(s="456")恢復到工作區:

bash

git stash pop

  • 此時,Git 會發現恢復的修改(s="456")與拉取的遠程修改(s="789")沖突(同一位置的不同修改),會自動標記沖突文件。
步驟 4:手動解決沖突

打開沖突文件,會看到類似以下的沖突標記:

plaintext

<<<<<<< Updated upstream  # 遠程拉取的代碼(s="789")
s="789"
=======
s="456"  # 你本地暫存的修改
>>>>>>> Stashed changes

  • 根據需求編輯文件,保留最終想要的內容(比如保留?s="456"?或?s="789",或修改為其他值),然后刪除沖突標記(<<<<<<<=======>>>>>>>)。
步驟 5:提交最終結果

解決沖突后,將文件加入暫存區并提交:

bash

git add <沖突文件路徑>
git commit -m "解決沖突,合并本地與遠程修改"

(如果需要,后續可以用?git push?推送到遠程)

總結:

即使本地修改未?add/commit,只要與遠程修改了同一文件的同一部分,最終恢復本地修改時就會產生沖突。通過?git stash?暫存 → 拉取遠程 → 恢復暫存并解決沖突的流程,即可安全處理這種場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96478.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flink面試題及詳細答案100道(41-60)- 狀態管理與容錯

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

【二開】CRMEB開源版按鈕權限控制

【二開】CRMEB開源版按鈕權限控制使用方法v-unique_auth"order-refund"<el-dropdown-itemv-unique_auth"order-refund">立即退款</el-dropdown-item >或者 滿足其中一個即可v-unique_auth"[order-delete,order-dels]"通過管理端權限…

AOSP源碼下載及編譯錯誤解決

源碼下載 軟件下載sudo apt-get updatesudo apt-get install gitsudo apt-get install curlsudo apt-get install adbsudo apt-get install reposudo apt-get install vimsudo apt-get install -y git devscripts equivs config-package-dev debhelper-compat golang curl配置g…

實驗-高級acl(簡單)

實驗-高級acl&#xff08;簡單&#xff09;預習一、實驗設備二、拓撲圖三、配置3.1、網絡互通3.2、配置ACL3.3、取消配置步驟1&#xff1a;先移除接口上的ACL應用步驟2&#xff1a;修改或刪除ACL中的錯誤規則方法A&#xff1a;直接刪除錯誤規則&#xff08;保留其他正確規則&am…

IoC / DI 實操

1. 建三層類包結構&#xff1a;com.lib ├─ config ├─ controller ├─ service ├─ repository ├─ model └─ annotation // 自定義限定符① 實體 Bookpackage com.lib.model; public class Book {private Integer id;private String title;// 全參構造 gette…

AdsPower RPA 從excel中依次讀取多個TikTok賬號對多個TikTok賬號目標發送信息

多個賬號對多個目標發送子場景 B&#xff1a;多個賬號向“不同的”目標循環發送&#xff08;最復雜的群發邏輯&#xff09;流程&#xff1a;Excel表中有一個“目標用戶”列表。RPA流程會進行嵌套循環&#xff1a;外層循環&#xff1a;遍歷Excel中的每一行數據&#xff08;即每一…

擴散模型進化史

一幅精美的圖片&#xff0c;一段精彩的視頻&#xff0c;可能始于一片純粹的噪聲。 2024年的計算機視覺頂會CVPR上&#xff0c;擴散模型成為絕對主角。從圖像生成到視頻理解&#xff0c;從超分辨率到3D建模&#xff0c;擴散模型正以驚人的速度重塑著AIGC&#xff08;AI生成內容&…

一次 Linux 高負載 (Load) 異常問題排查實錄

一次 Linux 高負載&#xff08;Load&#xff09;異常排查實錄一、背景及排查過程材料二、排查分析2.1Load 的真正含義2.2&#xff1a;確認異常進程2.3&#xff1a;線程卡在哪&#xff08;wchan&#xff09;2.4&#xff1a;perf 采樣&#xff08;用戶態/內核態熱點&#xff09;2…

淺析Linux進程信號處理機制:基本原理及應用

文章目錄概述信號類型可靠信號與不可靠信號Fatal信號與Non Fatal信號不可捕獲/忽略信號信號工作機制信號處理方式信號嵌套處理信號使用信號發送kill命令注冊信號處理函數信號安全與函數可重入性可重入函數線程安全與可重入性相關參考概述 Linux信號機制是進程間通信的一種方式…

【學習K230-例程19】GT6700-TCP-Client

B站視頻 TCP TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;傳輸控制協議/網際協議&#xff09;是指能夠在多個不同網絡間實現信息傳輸的協議簇。TCP/IP 協議不僅僅指的是 TCP和 IP 兩個協議&#xff0c;而是指一個由 FTP、SMTP、TCP、UDP、I…

o2oa待辦流程和已辦流程表

在o2oa系統中每個用戶有兩種唯一標識&#xff1a;第一種是姓名個人釘釘ID&#xff08;或者o2oa創建該用戶時設置的id&#xff09;ORG_PERSON.xdistinguishedName劉準3013692136672430P第二種是姓名所在部門的釘釘id個人釘釘idORG_IDENTITY.xdistinguishedName劉準966488616_301…

QT零基礎入門教程

基礎篇第一章 QT 基礎認知1.1 什么是 QT&#xff08;What&#xff09;?定義&#xff1a;跨平臺 C 應用開發框架&#xff0c;不僅用于 UI 設計&#xff0c;還包含核心功能&#xff08;如事件、網絡、數據庫&#xff09;。?核心特性&#xff1a;?跨平臺&#xff1a;一套代碼支…

遠程依賴管理新范式:cpolar賦能Nexus全球協作

文章目錄 前言一. Docker安裝Nexus二. 本地訪問Nexus三. Linux安裝Cpolar四. 配置Nexus界面公網地址五. 遠程訪問 Nexus界面六. 固定Nexus公網地址七. 固定地址訪問Nexus 前言 Nexus作為一款企業級倉庫管理工具&#xff0c;其核心功能在于集中管理各類軟件依賴&#xff0c;提供…

Prompt技術深度解析:從基礎原理到前沿應用的全面指南

引言 在人工智能技術飛速發展的今天&#xff0c;Prompt技術&#xff08;提示詞工程&#xff09;已成為連接人類智慧與機器智能的重要橋梁。隨著GPT-4、Claude、Gemini等大型語言模型的廣泛應用&#xff0c;如何有效地與這些AI系統進行交互&#xff0c;已成為決定AI應用成功與否…

性能測試工具Jmeter之java.net.BindException: Address already in use

首先請參考連接&#xff1a;https://blog.csdn.net/weixin_46190208/article/details/115229733 。配置完注冊表后一般就能解決問題。但并未解決我的問題 注冊表的MaxUserPort&#xff0c;TcpTimedWaitDelay兩個參數我只能配置MaxUserPort&#xff0c;設置TcpTimedWaitDelay后&…

JDK 新特性

JDK 新特性引入模塊Java 9 開始引入了模塊&#xff08;Module&#xff09;&#xff0c;目的是為了管理依賴。使用模塊可以按需打包 JRE 和進一步限制類的訪問權限。接口支持私有方法JAVA 9 開始&#xff0c;接口里可以添加私有方法&#xff0c;JAVA 8 對接口增加了默認方法的支…

如何高效應對網站反爬蟲策略?

現在大型網站的反爬策略越來越高明了&#xff0c;不僅是對IP訪問頻率、User-Agent請求頭進行異常識別&#xff0c;還會分析IP地址、瀏覽器指紋、JS動態加載、API逆向、行為模式等方式各種設卡&#xff0c;動不動跳出五花八門的驗證碼&#xff0c;非常難搞。 怎么應對反爬是個系…

c++ shared_ptr理解

不是一個智能指針對于一個計數器嗎&#xff1f;怎么變成共有資源的計數器了&#xff1f;你的意思是多個對象共用一個計數器&#xff1f;你問到了 std::shared_ptr 最核心、最精妙的設計機制&#xff01;你的問題非常深刻&#xff1a;“不是一個智能指針對應一個計數器嗎&#x…

002 Rust環境搭建

Rust環境搭建 現在很多集成開發環境(IDE)基本上都支持Rust開發。官方公布的支持工具&#xff1a;https://www.rust-lang.org/zh-CN/tools 這里以Windows 10 64位系統 Visual Studio Code為例來搭建Rust開發環境。 Rust安裝 Rust 的編譯工具依賴 C 語言的編譯工具&#xff0…

【Unity進階】Unity發布PC端,隱藏并自定義默認標題欄

開發環境&#xff1a; Unity2019.3.16f1c1 - 個人版 Visual Studio Community 2019 Windows10 專業版 x64嘿&#xff0c;各位朋友們&#xff01;當咱們歡歡喜喜地把項目打包成PC平臺的exe窗口程序&#xff0c;準備在電腦上一展游戲風采時&#xff0c;卻發現冒出來個Windows風格…