记录下使用的时候的小技巧
一、暂存(stash)
- 公司的代码需要在本地运行,所以有些配置需要在本地修改,但是在提交的时候你又不能一起提交,而且有些时候必须在提交前先恢复这个文件,
- 一开始的解决方法就是
git checkout *file
,先把文件一键还原,再提交,下次用的时候改,不过这样很麻烦 - 学习后:
git stash //文件的修改内容会被暂存后还原
git stash list //查看历史暂存信息,例如:stash@{0}: WIP on dev: d7943259 Merge branch 'tiefans' into 'dev'
git stash pop //一键还原修改,就会把修改重新写入文件
二、解决冲突(rebase)
- 当在一个分支
dev1
下修改了一个文件,同时新建dev2
分支,同样的地方也被修改,如下:
/branch-dev
......
var name = 'x'
......
/branch-dev1
......
var name = 'y'
......
/branch-dev2
......
var name = 'z'
......
- 当
dev1
分支被合并后,再合并dev2
就会提示冲突,因为他不能找到应该删除的var name = 'x'
这行。 - 解决它
git checkout dev
git pull
现在目标分支更新下代码
git checkout branch
再切回自己开发的子分支
git rebase dev
然后在文件中会有提醒,vscode中颜色被标为紫色
修改完后
git add (*file)
git rebase --continue
如果冲突解决,则成功提交,如果失败,则继续修改。
然后继续
git rebase --continue
......
最后没有问题后
git push origin branch
//当解决成功,git push的时候会提示
error: failed to push some refs to '*.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
这时候需要在后面加个参数 git push branch -f
因为在远端仓库会有一个版本,需要在本地解决后强制覆盖远程的版本即可
但是,有时候,在服务器端会出现冲突,只需要 git merge --abort
删除冲突合并请求后 git pull
三、撤销commit
写完代码后,我们一般这样
git add . //添加所有文件
git commit -m '本功能全部完成'
想要撤回已经提交的 commit
:
git reset --soft HEAD^
HEAD^
的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次 commit
,想都撤回,可以使用HEAD~2
参数:
--mixed
意思是:不删除工作空间改动代码,撤销 commit
,并且撤销 git add .
操作
这个为默认参数,git reset --mixed HEAD^
和 git reset HEAD^
效果是一样的。
--soft
不删除工作空间改动代码,撤销commit
,不撤销git add .
--hard
删除工作空间改动代码,撤销commit
,撤销git add .