git 正常提交流程:
git add . //所有文件提交到暂存区
git commit -m "本功能全部完成" //将提交文件提交到版本库
- 执行完add后,想撤回add,怎么办?
git status // 先看一下add 中的文件
git reset HEAD ***** //如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
- 执行完commit后,想撤回commit,怎么办?
git reset HEAD main.c; 将待删除的文件由暂存区恢复到工作区 //将之前添加到暂存区的的内容从暂存区移除
git checkout -- main.c; 将工作区的修改丢弃; //丢弃相对于暂存区中最后一次添加文件所作的变更
或者:
git reset --soft HEAD^ //这样就成功的撤销了你的commit 注意,仅仅是撤回commit操作,您写的代码仍然保留。
注释:
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 .
注意完成这个操作后,就恢复到了上一次的commit状态。
git rm与git rm --cached
当我们需要删除暂存区
或分支
上的文件, 同时工作区也不需要这个文件了, 可以使用
1 git rm file_path 2 git commit -m 'delete somefile' 3 git push
当我们需要删除暂存区
或分支
上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制, 可以使用
git rm --cached file_path git commit -m 'delete remote somefile' git push
git rm 与 操作系统的 rm 本质是一样的
区别:
- git rm main.c 完成
1.删除文件
2.将删除文件纳入暂存区;
回退删除之前:
git reset HEAD main.c; 将待删除的文件由暂存区恢复到工作区
git checkout -- main.c; 将工作区的修改丢弃;
- rm 完成删除文件,但不将删除文件纳入缓存区
回退删除之前:
git checkout -- main.c; 将工作区的修改丢弃;
git mv 重命名
- git mv 源文件名 新文件名 //修改完成会被纳入暂存区
git mv main.c test.c
回退修改前
git reset HEAD main.c; 将待删除的文件由暂存区恢复到工作区
git checkout -- main.c; 将工作区的修改丢弃;
- mv 源文件名 新文件名 //修改完成 并未纳入暂存区
git mv main.c test.c
回退修改前
git checkout -- main.c; 将工作区的修改丢弃;
如果commit注释写错了,改注释
git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了
或者 git commit --amend -m "修正的消息"