- commit到本地仓库中了,但是还没有做push操作的
1.文件被修改了,但未执行git add
操作(working tree内撤销)
git checkout fileName 或者 git checkout .
2.同时对多个文件执行了git add
操作,但本次只想提交其中一部分文件
git add * git status 取消暂存 git reset HEAD <filename>
3.文件执行了git add
操作,但想撤销对其的修改(index内回滚)
git reset HEAD fileName //取消暂存
git checkout fileName // 撤销修改
4. 修改的文件已被git commit
,但想再次修改不再产生新的Commit
git add last.txt git commit --amend -m "last speaking"
5.已在本地进行了多次git commit
操作,现在想撤销到其中某次Commit
git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]
- 已进行
git push
,即已推送到“远程仓库”中
1.如果打了Tag
git checkout <tag>
2.撤销指定文件到指定版本
git checkout <commitId> <filename>
3.删除最后一次远程提交
方法1:git revert HEAD 然后 git push 这种方法放弃了提交的修改,会生成一次新的提交,以前的历史记录都在
方法2:git reset --hard HEAD^ 然后 git push origin master -f 这种方式历史记录不会出现放弃的提交记录
4.回滚到某次提交
git revert commitID
5.删除某次提交
git rebase -i "commitID"^
赠送一枚练习git 的网站 :https://learngitbranching.js.org/
冲突问题:
如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,
在发布这个配置文件的时候,会发生代码冲突:
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.
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull
git stash pop
然后可以使用git diff -w +文件名 来确认代码自动合并的情况.
反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset --hard
git pull
其中git reset是针对版本,如果想针对文件回退本地修改,使用
git checkout HEAD file/to/restore