今天尝试用gitee进行两台电脑上的笔记的同步,在实验室尝试将笔记内容上传到gitee,结果因为git基本功不扎实又对git进行了系统的学习,记录一下在实际操作中碰到的分支问题和我自己的理解
1.本地在经过两次提交后和推到远端后
1 |
|
2.我手贱尝试了下git reset --hard HEAD^
1 |
|
果然修改内容的版本没了
3.然后我又对文件“git和github教程”进行了修改
1 |
|
推到远端毫无疑问的报错了
1 |
|
原因:
本地:全部提交–内容修改–对git有了更系统的认识,即A–C
远程:全部提交–内容修改,即A–B
关键是B和C的共有文件夹“git和github教程”发生改变了啊!!!合并必然报错啊!!!但是懵懂的我并不知道是这个原因。。。。。。。。。。。。
4.然后习惯性的执行了git pull
1 |
|
没疑问的报了冲突。
可以看到本地分支的变化
1 |
|
解释:
由于执行rebase导致,(master|REBASE 1/1)表示分支当前的冲突等待处理
可以执行的操作
1 |
|
但是作为一个傻白甜的萌新怎么可能知道这些,我学着用git diff查看冲突内容,然后按q退出了
之后原本的文件就多了许多的提示冲突的内容。
之后的状态就变成了:
1 |
|
5.回溯+重新提交
灵机一动,通过git reset HEAD来回溯commit不就可以找回文件了吗,而且还能将本地的“内容修改”,也就是例子中的B找回来,
这样本地分支和远程分支的路径也就不会冲突了。可以直接push。
事实证明这是科学的,也是可行的,但是前提是从(master|REBASE 1/1)状态退出
但是我木有,我直接在这种状态下push,结果。。。。。
还是一样的错误!!!!
然后我又一次:git pull
1 |
|
你看,人家都把路给我指明了(–continue | –abort | –skip)
但是我硬生生的选择了rm -fr “.git/rebase-merge”
OK,接下来在仓库中再次执行git pull :(杠上了)
1 |
|
没错,我有仓库但是没分支啦。。HEAD处于游离态。。
执行git status也是:
1 |
|
6.重新回到分支
1 |
|
想新建并回到master分支,但人家提醒有过了,看来分支并不会消除,只是HEAD丢了啊
重新给当前仓库定位分支:
1 |
|
到这我已经懒得去调整他的提交顺序了,因为对分支的含义已经理解的差不多了
于是,重建新的远程仓库+重新提交,一切都非常完美,本地master和origin/master都回到了正规。
7.思考
这也意味着一个事实,我的每一次修改都必须提交并推到远端。否则在下次进行修改时就会显示:
1 |
|
也就是你对工作区的修改没有提交导致的报错
当然,可以在一天的工作完成后准备回寝室的时候统一git add . + 提交 + push
8.把远程的文件pull到本地
回到了寝室,直接把_post文件夹下的文件全部清空,然后进行git初始化仓库。直接
1 | git pull origin master |
可以看到
1 |
|