Git常用命令整理十一(各种撤回)

这一回,关于撤回的命令,不能再称之为常用命令了,工作这么多年了,第一次真正的使用

Git系列的目录如下:
Git常用命令整理一(Git stash)
Git常用命令整理二(Git托管项目)
Git常用命令整理三(Git配置)
Git常用命令整理四(Git删除文件)
Git常用命令整理五(Git疑难杂症)
Git常用命令整理六(创建分支的子分支)
Git常用命令整理七(稀疏检出)
Git常用命令整理八(忽略文件)
Git常用命令整理九(忽略跟踪)
Git常用命令整理十(优雅用法)
Git常用命令整理十一(各种撤回)

一、常用操作
1、撤销git stash pop
原因:git stash pop有冲突,太多不可解,需要撤销

git reset --hard

2、撤销git add操作

# 撤销全部add文件
git reset HEAD .

# 撤销指定add文件
git reset HEAD  -filename

3、撤销git commit操作
不删除工作空间改动代码,撤销commit,不撤销git add

git reset --soft HEAD^

4、关于git reset命令
–mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset –mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

–soft
不删除工作空间改动代码,撤销commit,不撤销git add .

–hard
删除工作空间改动代码,撤销commit,撤销git add .

注意完成这个操作后,就恢复到了上一次的commit状态。

5、小结
其实记住git reset –hard就够了

二、常见问题

1、执行git reset –hard后还是提示有本地文件没有纳入版本管理

salmonl@B-3BD9Q05P-2155 car-merchant-level % git reset --hard
HEAD is now at 900f090 Merge commit 'ec95280b4a056136aa3146ec9572f69385fa496b'
salmonl@B-3BD9Q05P-2155 car-merchant-level % git status
On branch master
Your branch is behind 'origin/master' by 13 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.idea/
	diamond/
	logs/
	vendor/github.com/go-redis/redis/v7/.golangci.yml
	vendor/github.com/lestrrat-go/strftime/.golangci.yml
	vendor/github.com/vmihailenco/msgpack/v4/.golangci.yml
	vipsrv-cache/
	vipsrv-logs/

nothing added to commit but untracked files present (use "git add" to track)

解法

# 先clean
git clean -fd *
git reset --hard HEAD^^^^

原因
TODO
git clean经常和git reset –hard一起结合使用. 记住reset只影响被track过的文件, 所以需要clean来删除没有track过的文件. 结合使用这两个命令能让你的工作目录完全回到一个指定的的状态 参考git clean用法

思考
git reset –hard origin/master和git reset –hard HEAD^是不是一致

2、git reset后git push异常,提示error: failed to push some refs to ‘gitlab.alibaba-inc.com:AOS-OSS/car-merchant-management.git’

解法:git push origin branch –force 【参考: stackoverflow

参考:
撤销git add【思否】
git-reset【git-scm】
Git reset命令的使用【简书】

发表评论

电子邮件地址不会被公开。 必填项已用*标注