git

git解决代码冲突

Posted by Procon on February 8, 2019

git打解决代码冲突

一、解决冲突

1)冲突原因:

系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,在发布这个配置文件的时候,会发生代码冲突,报错如下:

error: Your local changes to the following files would be overwritten by

merge: dgstack/config/config.php

Please, commit your changes or stash them before you can merge.

2) 处理方法:

情况一 、如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:

1
2
3
4
5
6
7
8
9
10
11
git stash #把服务器上的修改放入抽屉

git pull #拉去最新内容,与git同步

git stash pop #将抽屉内容回复

git stash list #将抽屉内的所有内容展示

git stash config@{1} #如果列表有多个版本,想恢复其中的一个,就加入它的ID

git stash clear #将抽屉内容清

然后可以使用git diff -w +文件名 来确认代码自动合并的情况.

情况二、反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:

git reset –hard #将git恢复到指定版本HEAD

git pull #拉去最新代码

Bash

其中git reset是针对版本,如果想针对文件回退本地修改,使用

git checkout HEAD file/to/restore

二、git忽略指定文件

1
2
3
4
5
6
7
8
9
git update-index --assume-unchanged PATH_TO_FILE_HERE #忽略已追踪文件的变动

.gitignore #忽略本地文件进行更,有时会失效,可能是缓存的问题。

chattr #锁定本地文件,禁止更新

git rm #删除暂存区或分支上的文件, 同时工作区也不需要这个文件了

git rm --cached #删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制

三、撤销修改

git add 后撤销:

撤销所有add文件 git reset HEAD .

撤销单个add文件 git reset HEAD -filename

git commit 后撤销:

只回退commit的信息,保留修改代码:git reset –soft head

彻底回退到上次commit版本,不保留修改代码:git reset –hard head^

说明:

HEAD :当前版本

HEAD^ :上一个版本

–hard 参数会抛弃当前工作区的修改

–soft 参数的话会回退到之前的版本,但是保留当前工作区的修改,可以重新提交

撤销所有本地改动代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
git checkout .

将代码回退到指定版本

git reset --hard head号



git push 撤销

回滚此次push到服务器的代码:

git log查看commit的信息

git revert 以前commit的id

git push 此时本地回滚的代码到服务器就可以了

git merge 撤销:

$ git checkout 【行merge操作时所在的分支】

$ git reset --hard 【merge前的版本