Git pull/Push 冲突时的解决方法

我在对本地的PengBranch进行pull和push时都报错,因为有commits冲突,其中有大约60个Incoming Commits 和 5个Outgoing Commits. 这也就是说我本地的PengBranch有5个Commits是服务器上Origin/PengBranch上没有的,而服务器上PengBranch上有大约60多个Commits(别人修改提交的)是我本地的Local/PengBranch上没有的,所以有冲突了。无论是Pull还是Push操作,都报冲突错误,无法进行Pull/Push.

我仔细查看了我本地的5个Outgoing Commits, 可以不再需要,直接把Origin/PengBranch上的Pull下来,就可以了。于是,我进行了如下操作:

1. 在Visual Studio中Git菜单项下,选择”Git bash“

2. 输入命令:

   $ git reset --hard origin/PengBranch 

   这条命令的意思是,直接丢弃本地分支内容,直接获取远程分支,因为远程的分支origin/PengBranch正好是我们需要的,而本地的分支上的修改不需要了。这样,就直接把远程的Origin/PengBranch获取到了本地,而本地原来的5个Outgoing Commits全部丢失。

 

下面列出我在网上找的一些处理Pull/Push冲突时的解决方法:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

git pull报错:Auto Merge Failed; Fix Conflicts and Then Commit the Result.

1.出错场景:

协同开发时,我们从远程服务器上pull下代码的时候,出现以下提示信息:

Auto Merge Failed; Fix Conflicts and Then Commit the Result.

 

2.原因分析: 利用git status,输出如下:

root@hyk-virt:/etc# git status

# On branch master

# Your branch and 'origin/master' have diverged,

# and have 2 and 2 different commits each, respectively.

#

# Unmerged paths:

#   (use "git add/rm <file>..." as appropriate to mark resolution)

#

#    both modified:      apt/sources.list

#

# Changes not staged for commit:

#   (use "git add <file>..." to update what will be committed)

#   (use "git checkout -- <file>..." to discard changes in working directory)

#

#    modified:   cups/subscriptions.conf

#    modified:   cups/subscriptions.conf.O

#    modified:   mtab

#    modified:   update-manager/release-upgrades

# no changes added to commit (use "git add" and/or "git commit -a")

从git status的结果可以发现:其中sources.list这个文件存在合并冲突

而进一步分析git pull的原理,实际上git pull是分了两步走的,(1)从远程pull下origin/master分支(2)将远程的origin/master分支与本地master分支进行合并

以上的错误,是出在了第二步骤

  3.解决方法

方法一:如果我们确定远程的分支正好是我们需要的,而本地的分支上的修改比较陈旧或者不正确,那么可以直接丢弃本地分支内容,运行如下命令(看需要决定是否需要运行git fetch取得远程分支):

$:git reset --hard origin/master

或者$:git reset --hard ORIG_HEAD

解释:

 git-reset - Reset current HEAD to the specified state

--hard                Resets the index and working tree. Any changes to tracked files                in the working tree since <commit> are discarded.

方法二:我们不能丢弃本地修改,因为其中的某些内容的确是我们需要的,此时需要对unmerged的文件进行手动修改,删掉其中冲突的部分,然后运行如下命令

$:git add filename

$:git commit -m "message"

方法三:如果我们觉得合并以后的文件内容比价混乱,想要废弃这次合并,回到合并之前的状态,那么可以运行如下命令:

$:git reset --hard HEAD

 

 

----------------------------------------------另一篇关于Git做Pull/Push时冲突的解决方法---------------------------------------------------------------------------------------------------------------

通常問題是發生在本機端有做更動,遠端的 repository 也有其他人更動過,但是 code 的變動是屬於對立情形,git 無法自動 merge 成功,導致做 git pull 會出現 conflict。

依序指令下 git stash (會先將本機更動的檔案暫存)

git pull (會將 repo 程式碼拉回來並做 merge,其實 pull 指令本來就是 fetch + merge)

git stash apply (將暫存的 code 與現在 pull 後的 code 做 merge)

 

到此會分兩種情形,一種是 apply 成功,那就直接推上去

git commit

git push

另一種是 apply 後會發生 conflict ,這時候就要開啟編輯器,去看有 conflict 的程式碼,手動解決衝突(你會發現程式碼內有標明衝突區段),解完推上去,然後繼續拉 repo 程式碼

git commit

git push

git pull

如果 pull 之後又有 conflict ,就繼續手動解決衝突,然後 push ,反覆此行為直到你 pull 為 up-to-date 的狀態。

 

posted on   新西兰程序员  阅读(7703)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2013-12-19 转载SSIS中的容器和数据流—举例说明数据转换任务
2013-12-19 转载SSIS中的容器和数据流—数据转换(Transformations)续
2013-12-19 转载SSIS中的容器和数据流—数据转换(Transformations)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示