目录
error: You have not concluded your merge (MERGE_HEAD exists)
E325: ATTENTION. Found a swap file by the name".git/.MERGE_MSG.swp"
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 指令,提交到远程库