工做平常之git游离问题

前言

push代码死活push不上去。折腾了不少。出了不少问题。结果用最简单的办法解决了。java

开始了,提交不上去

代码终于写完,dome也写了,单元测试也过了,很是高兴,准备提交git

git push xxx xxx/dev-v1.0.1
T otal 0 (delta 0), reused 0 (delta 0)
To ssh://gitlab.xxxx.cn:xx/xxx/gateway.git
 ! [remote rejected] xx/dev-v1.0.1 -> xxx/dev-v1.0.1 (deny updating a hidden ref)
error: failed to push some refs to 'ssh://git@gitlab.xxx.cn:xxx/xxxx/gateway.git'

555555555555,提交不上去..... 宝宝的高兴劲被熄灭了...shell

百度一个解决方案
git pull --rebase origin master

远程库与本地库同步。app

git push origin HEAD:master

肯定上传分支,一本默认为master,这一步便可,不行试试下一步再上传。dom

git push -u origin master

嗯,目前好了。ssh

又开始

写了不少代码,须要提交另一个远程服务,上面百度的方法失效了gitlab

第一步pull就失败了,后续两步也尝试了无效。单元测试

dell@DESKTOP-9UF9FEN /xxxx/work/xxx/gateway (detached HEAD|REBASE 5/16)
git pull --rebase xxxx dev-v1.0.1
From ssh://gitlab.xxxx.cn:xxxx/xxxx/gateway
 * branch            dev-v1.0.1 -> FETCH_HEAD

It seems that there is already a rebase-apply directory, and
I wonder if you are in the middle of another rebase.  If that is the
case, please try
        git rebase (--continue | --abort | --skip)
If that is not the case, please
        rm -fr "D:/work/xxx/xxxx/.git/rebase-apply"
and run me again.  I am stopping in case you still have something
valuable there.

git status 也无效测试

git status
HEAD detached at xxxxx/dev-v1.0.1
nothing to commit, working tree clean

这个解决能够用,下面的命名解决lua

git rebase --abort
git pull --rebase 遇到大问题

由于本地代码比远程的代码多几个提交,执行git pull --rebase 远程代码把本地代码覆盖了..悲剧。哎!!! 立刻想到回滚到最近的提交

git log
commit 200b6141a884989124009487fa90deb776e2d047 (HEAD)
Author: liukang <xxx@xxx.com>
Date:   Fri Sep 27 10:22:02 2019 +0800

    add:
    一、新增常量 xxxxx

commit bcd2ed304174064539291dcb028cfcae3579a169
Author: liukang <xx@xxx.com>
Date:   Fri Sep 27 10:19:53 2019 +0800

    add:
    一、新增批量登记数据接口
	
	
git reset --hard 200b6141a884989124009487fa90deb776e2d047

结果发现代码仍是没有......

回滚的正确姿式

第一步执行 git reflog

git reflog

200b614 (HEAD) HEAD@{0}: pull --rebase xxx dev-v1.0.1: add:
bcd2ed3 HEAD@{1}: pull --rebase xxx dev-v1.0.1: add:
3e585df HEAD@{2}: pull --rebase xxx dev-v1.0.1: add:
88c6b64 HEAD@{3}: pull --rebase xxx dev-v1.0.1: add:
5fcacb6 (xxxx/dev-v1.0.1, master, dev-1.0.1) HEAD@{4}: pull --rebase xxxx dev-v1.0.1: checkout 5fcacb6d64f0562cc796d16dd7f9dd2e9407c904
3ed474f HEAD@{5}: rebase: updating HEAD
1796d7f HEAD@{6}: commit (merge): pull 最新代码
3ed474f HEAD@{7}: reset: moving to 3ed474f
5fcacb6 (xxxxx/dev-v1.0.1, master, dev-1.0.1) HEAD@{8}: reset: moving to 5fcacb6
3ed474f HEAD@{9}: reset: moving to 3ed474f
e4c2b62 HEAD@{10}: reset: moving to e4c2b62
3ed474f HEAD@{11}: reset: moving to 3ed474f
5fcacb6 (xxxxx/dev-v1.0.1, master, dev-1.0.1) HEAD@{12}: checkout: moving from 2713bf28e9d15541f022846eaf3a8d80a3074c8c to laohu/dev-v1.0.1
2713bf2 (origin/dev-v1.0.1) HEAD@{13}: checkout: moving from 63cbda1fcd160ae381a5c436fbf4d4a114e2ffb5 to origin/dev-v1.0.1
63cbda1 HEAD@{14}: reset: moving to 63cbda1fcd160ae381a5c436fbf4d4a114e2ffb5
3c8ecb3 HEAD@{15}: reset: moving to 3c8ecb3ca430ac05f4d0a3c48db8fdac53417e2e
76c47a1 HEAD@{16}: commit: 处理冲突
3c8ecb3 HEAD@{17}: commit: 解决更新问题

第二步执行 git reset --hard 【 找第一列的id, 1796d7f HEAD@{6}: commit (merge): pull 最新代码 。id为 1796d7f】

git reset --hard 1796d7f
问题在哪里,问题在这里

当执行 git pull --rebase origin master,有这样的提示

dell@DESKTOP-9UF9FEN /xxxx/work/xxx/gateway (detached HEAD|REBASE 5/16)

重点:detached HEAD|REBASE 5/16

重点:detached HEAD|REBASE 5/16

重点:detached HEAD|REBASE 5/16

detached表示当前分支处理游离状态,意识是当前分支是直接在远程分支上进行操做的,没有与本地分支进行关联。解决detached状态就能够提交了。

第一步 经过建立临时分支解决分支的detached状态

git checkout -b new_tmp
Switched to a new branch 'new_tmp'

第二步 切换到须要push的远程分支

git checkout xxxx/dev-v1.0.1
Note: checking out 'xxxx/dev-v1.0.1'.

第三步 建立本地分支

git checkout -b dev-v1.0.1
Switched to a new branch 'dev-v1.0.1'

第四步 把临时分支的代码合并到本地分支

git merge new_tmp
Updating 5fcacb6..1796d7f

第五步 push代码到远程分支

git push xxxx dev-v1.0.1

总结

要养成这样的习惯

每次pull远程分支,立马建立本地分支,在本地分支上开发,就不遇到detached问题,就不会出现上面的问题

要探求根源

detached的问题之前也出现过,简单的百度解决以后,没有探求根源。总是反复的出现一样的问题。今天探求了detached的根源,之后再出现detached的问题,能简单的解决了

PS: 吾' 探求根源

相关文章
相关标签/搜索