git的操作记录
与服务器上的代码产生冲突
如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,在发布这个配置文件的时候,会发生代码冲突:
error: Your local changes to the following files would be overwritten by merge:
protected/config/main.php
Please, commit your changes or stash them before you can merge.
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
1 |
|
然后可以使用 git diff -w +文件名
来确认代码自动合并的情况.
反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
1 |
|
其中 git reset
是针对版本,如果想针对文件回退本地修改,使用
1 |
|
辛辛苦苦加班一星期敲的代码没了
过程是这样的,在终端输入 git log,列出所有的 commit 信息,如下图:
commit 的信息很简单,就是做了 6 个功能,每个功能对应一个 commit 的提交,分别是 feature-1 到 feature-6。
接下来执行了强制回滚,如下:
1 |
|
回滚到了 feature-1 上,并且回滚的时候加了—hard,导致之前 feature-2 到 feature-6 的所有代码全部弄丢了,现在 git log 的显示如下:
现在 feature-2 到 feature-6 的代码没了。。。。。
然鹅还没完,在这个基础上新添加了一个 commit 提交,信息叫 feature-7,如下图:
现在 feature-2 到 feature-6 全没了,还多了一个 feature-7
请问 如何把丢失的代码 feature-2 到 feature-6 全部恢复回来,并且 feature-7 的代码也要保留
用 git reflog 和 git cherry-pick 就能解决
在终端里输入:
1 |
|
然后就会展示出所有你之前 git 操作,你以前所有的操作都被 git 记录了下来,如下图:
这时候要记好两个值:4c97ff3 和 cd52afc,他们分别是 feature-7 和 feature-6 的 hash 码。然后执行回滚,回到 feature-6 上:
1 |
|
现在我们回到了 feature-6 上,如下图:
我们回到了 feature-6 上,但是 feature-7 没了,如何加上来呢?
这个时候就用上了 git cherry-pick,刚刚我们知道了 feature-7 的 hash 码为 4c97ff3,操作如下:
1 |
|
回车之后,你的 feature-7 的代码就回来了。
期间可能会有一些冲突,按照提示解决就好。最后的结果如下图:
feature-1 到 feature-7 的代码就合并到了一起,以前的代码也都回来了。
自己总结
1 |
|