一、git revert和git reset都是回滚提交记录,区别是什么?
a、git reset回滚到指定的commit_id,在该commit_id之后的提交会被删除。
1、通过git log找到要撤销的commit的版本号,复制它上一个版本号(注意版本号之后的提交都会被撤销)
2、执行
git reset --hard ac82adae143fffd4ad9c0b08c983ac8679809b82
将指针回退到该版本号
--hard 表示抛弃当前工作区的修改
--soft 表示保留当前工作区的修改
3、覆盖远程代码
git push origin feature/app2_20170531_aicai-bk --force
将本地版本覆盖远程版本,因为本地版本落后于远程版本,所以要加--force
git push origin 本地分支名:远程分支名 --force
当本地和远程分支名不同时需要注明,否则远程不会被覆盖。
此时再看git log,如下图
b、git revert是将之前的提交反转(新增就删除),然后作一次新的提交,原log日志保留。
1、git revert -n commit_id // 复原指定的commit_id
git revert -n commit_id -m parent_num // 当复原的commit_id是merge操作,需要指定parent_num。如在分支feature/YYHD-2233上执行merge feature/test,parent 1是feature/YYHD-2233,parent 2是feature/test。
2、可以看到在分支名右侧出现REVERTING(feature/YYHD-2233|REVERTING),所以需要commit生成新的提交记录。
二、gitignore不起作用的解决
当要忽略某个文件不想被版本控制时可以写到.gitignore文件,但实际是用git status发现文件仍然被跟踪,原因是这个文件之前被跟踪过仍在暂存区中。
执行以下命令将文件中暂存区中移除
git rm --cached filename
然后再修改此文件,执行git status发现已被忽略
三、从一个git仓库迁移代码到另一个git仓库
// 获取远程仓库,默认origin
$ git remote
origin
// 新增远程仓库origin2(名称随意)
$ git remote add origin2 master
// 将远程仓库origin2设置一个新的远程连接
$ git remote set-url origin2 http://gitlab.example.com/front/syao-front.git
// 再次查看远程仓库
$ git remote
origin
origin2
// 将本地master分支拷贝到远程master分支
$ git push origin2 master:master