1.打开git的history
2.点击下图Log
3.点击如下
4.这时候将你的SHA(秘钥)粘贴进去
(图中这一长串数字是经过SHA加密得到的,所有的操作都是对其进行操作和记录的)
5.点击OK,你会发现你的分支是这一长串数字,此时你的分支处于游离状态可以执行如下操作进行解决
创建一个临时分支:
git branch tmp bf0040f(在游离状态下提交commit会产生新的ID,如图bf0040f,应以新的ID为准)
创建分支的命令:git branch 分支名 操作的ID,此时并没有切换到tmp分支上去,但是tmp分支上的内容就跟最后提交的bf0040f一样。
切换到需要合并的分支(例如master):
git checkout master
切换了分支之后我们需要将tmp合并到检出的分支(master):
git merge tmp
最后我们只需要push对应的master分支中提交的信息。
删除刚刚创建的临时分支
git branch -d tmp
(简单来说,就是重新创建一个内容是游离状态的分支,然后可以在将此分支代码合并到建立起联系的远程git上的分支)
6.push到远程就OK了!!
1.通过git reflog命令查看操作日志:
git reflog
2.查看对应的版本号,就可以恢复到任意版本:
D:\IdeaProjects\mbs>git reflog
8fb5ece (HEAD -> TEST_20181227_temp, origin/TEST_20181227_temp) HEAD@{0}: commit (merge): Merge remote-tracking branch 'origin/temp' into TEST_2
0181227_temp
c84be48 (origin/test) HEAD@{1}: checkout: moving from master to TEST_20181227_temp
d13a8c6 (origin/master, origin/HEAD, master) HEAD@{2}: clone: from http://192.168.120.68/root/mbs.git
3.直接找到要回退的版本号(这里是"8fb5ece"),reset之后,强行推送到服务器端:
git reset --hard 8fb5ece
git push --force
4.此时如果有人获取了更新的版本,可能拉去不下来,执行以下操作:
git fetch --all
git reset --hard origin/branchname
5.branchname就是分支的名称,这时候就和服务器端的版本一致了。
6.在合并分支的时候,本地合并远程直接点击如下图
所示的Merge into Current就会将远程代码合到本地,有冲突的话,注意,your version是你本地的版本,二Your Right是远程代码的版本,另外,要注意"Abort"是取消本次操作的意思。
当你解决完冲突后,你会发现这时候你在提交你合并完代码的本地分支时,你会发现
并没有变化,所以你需要用到强制push到远程仓库
打开git bash或者直接打开terminal如下操作:
注意,origin后面是你要push远程分支的名字。
此时,恭喜你使用git进行版本的回退和恢复就变得so easy!!!
心得:
我发现自己在远程gitlab上创建一个分支的时候,他会让你选择继承哪个分支,继承的分支其实HEAD指针是一样的,即这两个分支的SHA秘钥(ID)是一样的。你在本地操作分支的时候,也是移动的是HEAD,指向不同,代表不同分支。你每次commit的时候,就会生成另一个SHA秘钥,这个网上有很多优秀大佬的文章讲解,大家可以多去看看!!
我是初学git,有很多说的不对的地方希望大家积极提出意见,我也会乐意分享自己的见解,
希望此文在大家在学习git时有一些帮助!!!
转发请注明出处哟!