Git 版本控制

使用 git 管理项目的时候,可能会在不同的阶段出现错误操作,如添加或提交了不需要的文件,将本地提交的不需要的文件推到了远程服务器等。这里对 git 在不同阶段撤销更改进行一下总结。

撤销刚添加到版本库文件

在使用 git 时,在未添加.ignore文件前使用 git add file 将所有文件添加到库中,==不小心将一些不需要加入版本库的文件加到了版本库中==。

由于此时还没有提交所以不存在HEAD版本,不能使用 git reset HEAD命令。

git rm -r --cached file

例如,新添加文件 test:

$ echo "123" >> test
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        test

$ git add test
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   test

$ git rm -r --cache test
rm 'test'

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        test

撤销对工作区内容的修改

场景1:当你改乱了工作区某个文件的内容,并且==还没有添加到暂存区==,想直接丢弃工作区的修改时,用命令:

git checkout file

场景2:当你不但改乱了工作区某个文件的内容,还==添加到了暂存区==时,想丢弃修改,分两步执行:

# 第一步
git reset HEAD file
# 第二部
git checkout file

尝试重新提交

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行 git commit –amend 的提交命令尝试重新提交:

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。

版本回退

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,需要进行版本回退(前提:还没有推送到远程库)

HEAD指向的版本就是当前版本。

# 回退到上一版本
git reset --hard HEAD^  
# 回退到上上版本
git reset --hard HEAD^^  
# 回退到指定版本
git reset --hard commit_id 

回退远程版本

对某文件的修改已经push到远程仓库,现在回退到修改上一版本.

git  reset --hard  HEAD^  xxx  
git  push  -f  

HEAD意义

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和
你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写
成HEAD~100。

查看提交历史

git log

查看未来提交的历史

# 查看命令历史,以便确定要回到未来的哪个版本
git reflog

git reset 回滚以后,如何再回去
可以通过reflog来进行恢复,前提是丢失的分支或commit信息没有被git gc清除
一般情况下,gc对那些无用的object会保留很长时间后才清除的

可以使用git reflog show或git log -g命令来看到所有的操作日志:

1 通过git log -g命令来找到需要恢复的信息对应的commitid,可以通过提交的时间和日期来辨别,找到执行reset --hard之前的那个commit对应的commitid
2 通过git branch recover_branch commitid 来建立一个新的分支

这样,就把到commitid为止的代码、各种提交记录等信息都恢复到了recover_branch分支上了。

参考:Git 基础 - 撤消操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值