【Git入门之五】版本管理
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12271811
1.版本回退
我们先看一下从项目开始到现在做了什么操作。
[cpp] view plaincopy- #总共是4个操作
- $ git log --pretty=oneline
- c5c83cfcdb25c67a5c66b4fe3844d0ea912830ec remove JackyData03
- a25c58804cb3f4045564fc0ec6a4e6eb4dae7072 amend modify JackyData02
- cba8800f2daaf4075a506b6d763798ea15ba11cc modify JackyData01
- aea0365712908805bc28540b4db9fd2f15360a8b init AddFiles
git reset用于版本回退,首先我们必须先知道当前版本是哪个,git用HEAD来表示当前版本。HEAD^表示上一个版本,HEAD^^表示上上个版本,HEAD~100表示往前100个版本。
[cpp] view plaincopy- #回退到上一个版本
- $ git reset --hard HEAD^
- HEAD is now at a25c588 amend modify JackyData02
2.版本选择
这时我们再看看操作日记。
[cpp] view plaincopy- #只剩3个操作了,移除JackyData03的操作不见了
- $ git log --pretty=oneline
- a25c58804cb3f4045564fc0ec6a4e6eb4dae7072 amend modify JackyData02
- cba8800f2daaf4075a506b6d763798ea15ba11cc modify JackyData01
- aea0365712908805bc28540b4db9fd2f15360a8b init AddFiles
(1)如果git bash没被关掉,向前滚动找到
[cpp] view plaincopy- #移除JackyData03文件的版本号
- c5c83cfcdb25c67a5c66b4fe3844d0ea912830ec remove JackyData03
- #还是使用reset,直接选择要切换的版本号
- $ git reset --hard c5c83c
- HEAD is now at c5c83cf remove JackyData03
可以看到提示HEAD现在处在c5c83c这个版本位置。
(2)如果git bash被关掉了,找不到版本号了怎么办?
git reflog可以显示每一次的操作记录。
[cpp] view plaincopy- $ git reflog
- c5c83cf HEAD@{0}: reset: moving to c5c83c
- a25c588 HEAD@{1}: reset: moving to HEAD^
- c5c83cf HEAD@{2}: commit: remove JackyData03
- a25c588 HEAD@{3}: commit (amend): amend modify JackyData02
- a5f6601 HEAD@{4}: commit: modify JackyData02
- cba8800 HEAD@{5}: commit: modify JackyData01
- aea0365 HEAD@{6}: commit (initial): init AddFiles
3.撤销修改3.1.工作区
再修改点东西。
[cpp] view plaincopy- #修改JackyData01内容
- $ echo "GoodBye SVN" > Jackydata01
- #看一下状态,Jackydata01在工作区被修改了(红色高亮)
- $ git status
- # On branch master
- # Changes not staged for commit:
- # (use "git add <file>..." to update what will be committed)
- # (use "git checkout -- <file>..." to discard changes in working directory)
- #
- # modified: Jackydata01
- #
- no changes added to commit (use "git add" and/or "git commit -a")
git checkout --file可以撤销工作区的修改
[cpp] view plaincopy- #撤销JAckydata01的改动
- $ git checkout -- Jackydata01
- #看一下当前Git仓库的状态,干净的
- $ git status
- # On branch master
- nothing to commit, working directory clean
3.2.暂存区
再改Jackydata01的内容。
[cpp] view plaincopy- #修改JackyData01内容
- $ echo "GoodBye SVN" > JackyData01
- #修改内容add到暂存区
- $ git add Jackydata01
- #看一下状态,JackyData01在被修改了,并add到暂存区(绿色高亮)
- yf005@yf005 /d/jackygit (master)
- $ git status
- # On branch master
- # Changes to be committed:
- # (use "git reset HEAD <file>..." to unstage)
- #
- # modified: Jackydata01
- #
这时直接使用git checkout --file是无效的。
必须先使用git reset HEAD file把暂存区的修改撤回到工作区的修改。
[cpp] view plaincopy- #撤回到工作区的修改
- $ git reset HEAD Jackydata01
- Unstaged changes after reset:
- M Jackydata01
- #看一下当前状态,未添加到暂存区(红色高亮)
- $ git status
- # On branch master
- # Changes not staged for commit:
- # (use "git add <file>..." to update what will be committed)
- # (use "git checkout -- <file>..." to discard changes in working directory)
- #
- # modified: Jackydata01
- #
- no changes added to commit (use "git add" and/or "git commit -a")
3.3.已提交到版本库
如果已经提交到版本库,那么使用1.版本回退功能吧。
3.4.其他撤销指令
其他撤销指令诸如git clean和git revert请自行尝试。