git about

本文详细介绍了Git在处理异常情况如未合并的文件、未完成的合并、冲突解决以及如何在提交历史中穿梭时的解决方案。同时,讲解了如何使用git reset和cherry-pick命令来撤销和复制提交。内容涵盖错误排查、冲突解决和高级Git操作,旨在帮助开发者更好地管理和维护Git仓库。
摘要由CSDN通过智能技术生成

目录

Error 异常处理

error:path “xxx“ is unmerged

error: You have not concluded your merge (MERGE_HEAD exists)

merge conflict/abandon后续重新提交

git reset 到指定commit之后怎么再跳回去

E325: ATTENTION. Found a swap file by the name".git/.MERGE_MSG.swp"

GIT 命令应用

git (master|REBASE 1/2)

cherry-pick[合并提交节点到其它分支]


Error 异常处理

error:path “xxx“ is unmerged

现象

$ git checkout HEAD foo/bar.txt
error: path 'foo/bar.txt' is unmerged

 解决

$ git reset foo/bar.txt
$ git checkout foo/bar.txt

error: You have not concluded your merge (MERGE_HEAD exists)

原因

可能是在以前pull下来的代码自动合并失败

 解决

1、保留本地的更改,中止合并->重新合并->重新拉取

$:git merge --abort
$:git reset --merge
$:git pull

2、舍弃本地代码,远端版本覆盖本地版本(慎重)

$:git fetch --all
$:git reset --hard origin/master
$:git fetch

merge conflict/abandon后续重新提交

$:git log --oneline    #查看当前日志及commit ID
$:git reset "commit ID"    #回到提交的前一个ID节点
$:git log    #查看log是否成功回退
$:git pull    #重新拉下来合并,并解决冲突
              #如果遇到error: Your local changes to the following files would be overwritten by merge:
    $:git stash  
    $:git pull origin dev(当前分支号)  
    $:git stash pop 
$:git log    #查看log是拉到最新的节点,并确认是否有脏节点(类似一条带网址的非人为提交)
    #如有
    $:git stash    #将本地变化保存到缓冲区 
    $:git rebase    #清掉本地变化
    $:git stash pop   #恢复缓存区内容 (这里可能还有一些操作,暂时忘记了)
    $:git log    #确认是否还存在
$:git add/commit/push    #重新提交

git reset 到指定commit之后怎么再跳回去

$:git reset c08ffad99    #示例 reset到c08ffad99(log --oneline获取)节点
$:git log    #发现已经回退到该节点,此时再回到刚刚最新节点去
$:git reflog    #这个命令记录了本地操作指令
    #举例:
    de0a3fdc5 (HEAD -> dev_oy22) HEAD@{0}: reset: moving to de0a3fdc5
    de0a3fdc5 (HEAD -> dev_oy22) HEAD@{1}: reset: moving to de0a3fdc5
    beb02dc1e HEAD@{2}: pull: Fast-forward
    ec1649759 HEAD@{3}: pull: Fast-forward
    de0a3fdc5 (HEAD -> dev_oy22) HEAD@{4}: commit: add elx_app_alarm,use this replace the         GR app_alarm
    9619a57a3 HEAD@{5}: pull: Fast-forward
    16036f3cd HEAD@{6}: pull: Fast-forward
$:git reset beb02dc1e #可以很方便的回到beb02dc1e 这个操作环境中
$:git log    #发现已经重新回到最新节点

E325: ATTENTION. Found a swap file by the name".git/.MERGE_MSG.swp"

error: There was a problem with the editor 'vi'.
Not committing merge; use 'git commit' to complete the merge.
E325: ATTENTION
Found a swap file by the name ".git/.MERGE_MSG.swp"

//找到".git/.MERGE_MSG.swp",之后删除即可,然后重新执行操作

GIT 命令应用

git (master|REBASE 1/2)

在不慎多次提交后出现 (dev|REBASE 1/2),

解决办法:

git rebase --abort //回退提交

cherry-pick[合并提交节点到其它分支]

git cherry-pick,将指定的提交(commit)应用于其他分支。

例,代码仓库有master和feature两个分支。

    a - b - c - d   Master
         \
           e - f - g - h - i - j - k   Dev

现在将提交 f 应用到master分支。

# 在Dev分支获取最近节点的HASHcommit值  
$ git log --oneline

# 切换到 master 分支 
$ git checkout master

# 执行 Cherry pick 操作
$ git cherry-pick f

上面的操作完成以后,代码库就变成了下面的样子。

    a - b - c - d - f   Master
         \
           e - f - g - h - i - j - k   Dev

Cherry pick 支持其它提交方式。

# 应用Dev分支最新提交
$ git cherry-pick Dev

# 应用多个提交: 合并g,i两个提交
$ git cherry-pick <HashG> <HashI>

# 应用 f - k 之间的提交,不包含F节点本身,注意f节点必须是k节点前的提交节点
$ git cherry-pick f..k 

# 应用 f - k 之间的提交,包含F节点本身
$ git cherry-pick f^..k 

执行git cherry-pick 后,只是将提交合并到本地,需要执行git push 指令,提交到远程库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值