Git 版本控制
2017-01-05 17:32
651 查看
使用 git 管理项目的时候,可能会在不同的阶段出现错误操作,如添加或提交了不需要的文件,将本地提交的不需要的文件推到了远程服务器等。这里对 git 在不同阶段撤销更改进行一下总结。
撤销刚添加到版本库文件
在使用 git 时,在未添加.ignore文件前使用 git add file 将所有文件添加到库中,==不小心将一些不需要加入版本库的文件加到了版本库中==。
由于此时还没有提交所以不存在HEAD版本,不能使用 git reset HEAD命令。
例如,新添加文件 test:
撤销对工作区内容的修改
场景1:当你改乱了工作区某个文件的内容,并且==还没有添加到暂存区==,想直接丢弃工作区的修改时,用命令:
场景2:当你不但改乱了工作区某个文件的内容,还==添加到了暂存区==时,想丢弃修改,分两步执行:
尝试重新提交
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行 git commit –amend 的提交命令尝试重新提交:
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。
版本回退
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,需要进行版本回退(前提:还没有推送到远程库)
HEAD指向的版本就是当前版本。
回退远程版本
对某文件的修改已经push到远程仓库,现在回退到修改上一版本.
HEAD意义
查看提交历史
查看未来提交的历史
参考: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 基础 - 撤消操作;
相关文章推荐
- 版本控制工具git的简单使用
- 分布式版本控制工具:git与Mercurial
- window下版本控制工具Git 客户端安装
- 版本控制工具git使用指南
- Linux内核开发的版本控制工具Git中文教程
- XylFTP改用git进行版本控制
- 版本控制工具git的安装和常用命令
- 分布式和集中式版本控制工具-svn,git,mercurial
- 为什么说 Git 将取代 SVN 做软件版本控制?
- 版本控制 Git 常用操作命令
- 分布式版本控制工具:git & mercurial
- 版本控制git <上>
- 【转】分布式版本控制工具学习--Git
- 常见版本控制工具CVS/SVN/Git的主要区别
- Git 系列之一:版本控制的概念、分布式、Git 简介及其工作流程-转载
- Git 和 ensp;– 快速的版本控制制度
- 分布式版本控制工具学习--Git
- 版本控制之道——使用Git_样章
- 为什么说 Git 将取代 SVN 做软件版本控制?(转)
- Git 版本控制