Git踩坑记

1.IDEA Undo commit功能
2018版本的IDEA的git里有一个undo commit功能,可以撤销某次提交到本地的操作,即commit操作。
在version control窗口的log标签中显示了本地commit记录,包括已push和未push的。
若想撤销已commit操作,则只需在该记录上右键并选择undo commit即可撤销,原本已经commit到本地的文件会变成待commit状态,即暂存区,一切就都回到了可控的状态。

2.意外的merge
commit前pull,然后push前再pull,尴尬的事情发生了,就这么一会的功夫,又有人提交了代码
此时本地分支与远程分支相比,本地分支的版本落后于远程分支,因此需要将远程更新的增量拉取到本地然后合并,
那么这时git会提示你有文件需要merge
此时有2种情况:
(1).未冲突:那直接merge就好,git把远程的代码pull下来,然后合并到本地,然后自动提交,只是一个同步的过程。
(2).有冲突:提示push或pull失败,存在冲突文件,需要手动处理冲突,这时就会有一个列表,包含所有冲突文件,左边是你本地,右边是线上。
Git踩坑记
千万注意
一定要看好这些冲突文件是不是你的然后再处理,如果是你的,则仔细处理冲突,不要将别人的代码覆盖了
如果不是你的,一定要去线上比对最新版本的代码,这个最新版本的才是最终需要的,千万不要盲目覆盖,这样会导致别人的修改丢失,虽然能找回,但是很麻烦。
总之,处理冲突要小心小心再小心,在自己本地怎么作妖都行,一旦涉及到push到远程仓库,就要确定以下2点
(1).提交的文件是否包含他人的文件,如果包含,是否与最新版一致
(2).自己提交的修改是否已完全处理好冲突,没处理好有可能再次提交失败。
处理完冲突后,需要重新commit和push,一遍,不要忘了。

3.工作区,暂存区,本地仓库,远程仓库

Git踩坑记
工作区(workspace):修改文件的区域
暂存区(stage area):维护一颗文件树,新创建文件需要使用add将文件添加到暂存区并跟踪文件的修改状态
本地仓库(Local repository):将暂存区的文件通过commit提交到本地仓库
远程仓库(Remote repository):本地仓库文件通过push提交到远程仓库,完成一次提交流程。

常用操作:
pull:最常用操作,将远程仓库新代码拉取到本地,并更新本地仓库的head,与远程仓库保持一致。
fetch:拉取更新但不合并,pull = fetch+merge,一般用pull
reset:撤销本地更新,一般跟着一个head,hard reset,注意本次reset是否涉及到其他人的代码
revert:撤销某次提交,以新的提交中和之前的提交。

注意reset和revert的区别
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入
git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

远程代码版本回退使用如下方式:
hard reset本地代码到历史版本(head)—>push提示冲突—>取消merge—>以mixed reset本地代码到最新版的head—>重新push
https://blog.csdn.net/gomeplus/article/details/78241070

最重要的是:
在自己本地或自己的分支上可以可劲儿作妖,但是一旦涉及到其他人的文件,或你们用的是同一个分支,就得小心小心再小心,push到远程时要确认确认再确认,不要影响到其他人的文件,保持他人的文件与最新版一致,执行完reset和revert之后不要轻易push,仔细确认后再push。