git四个阶段的撤销更改
基本概念
三个步骤
- 工作区→暂存区→本地仓库→远程仓库
1
2
3git add .
git commit -m "content"
git push
git add.把所有文件放入暂存区git commit把所有文件从暂存区提交进本地仓库;git push把所有文件从本地仓库推送进远程仓库。
四个区
git相比于svn等传统的版本管理工具,多了一个暂存区(state)的概念
- 工作区(Working Area)
- 暂存区(State)
- 本地仓库(Local Repository)
- 远程仓库 (Remote Repository)
五种状态
进入每一个区都会有一种状态,加上初始状态,刚好5个状态,分别如下:
- 未修改(Origin)
- 已修改(Modified)
- 已暂存(Stated)
- 已提交(Commited)
- 已推送(Pushed)
检查修改
已修改,未暂存
当我们修改了某个文件,但是还没有git add .之前,我们用git diff命令来检查哪些文件内容被修改了【还未进入暂存区】
已暂存,未提交
现在我们把 修改 放入暂存区看看。先执行 git add .,再执行 git diff,会发现没有任何结果。【说明:git diff只检查工作区和暂存区之间的差。如果我们想看到暂存区和本地仓库间的差异,使用git diff cached】
已提交,未推送
现在我们把修改从暂存区提交到本地仓库,先执行git commit,再执行git diff --cached,没有差异。执行git diff master origin/master,我们可以看到差异。master是你的本地仓库,而origin/master是你的远程仓库,master是分支的意思,因为我们都在主分支上工作,而origin就代表远程。
撤销修改
如果我们只在编辑器里修改了文件,但还没有执行git add .,这时我们的文件还在工作区,并没有进入暂存区。我们可以用:1
git checkout 或 git reset --hard 来进行撤销操作,
修改后git add .前进一步,git checkout后退一步撤销刚才的修改。
已暂存,本地已提交
你已经执行了git add .,但还没执行git commit -m 'comment',这时候意识到错误,想要撤销可以执行1
2git reset
git checkout
或1
git reset --hard
已提交,未推送
执行了git add .,又执行了git commit ,这时候你的代码进入了本地仓库,1
git reset --hard origin/master
已推送的1
2git reset --hard HEAD^ //先恢复本地仓库
git push -f //强制push到远程仓库
fatal: Authentication failed for又不弹出用户名和密码
重置
切换执行命令1
git config --system --unset credential.helper
然后就可以重新提交用户名和密码进行提交了
添加本地项目到git【本地已配置用户名及密码】
命令行中执行以下:1
2git init ----------初始化git仓库
git remote add origin 你的项目地址 //注:项目地址形式为:http://git.oschina.net/xxx/xxx.git或者 git@git.oschina.net:xxx/xxx.git 用来连接远程码云
开始第一次上传你的项目1
2
3git add . --将项目中的所有文件上传
git commit -m '对上传文件的注释'
git push origin master --正式上传至码云中,若上传有问题,可以试试 git push origin master -f 表示舍弃线上的文件,强制推送
推送成功后git pull时【需要进行一次远程分支和本地分支的关联】
1
2
3git branch -a
git branch --set-upstream-to=remotes/origin/master master
git回滚到任意版本
先显示提交的log
1 | $ git log -3 |
回滚到指定版本
1 | git reset --hard e377f60e28c8b84158 |
强制提交
1 | git push -f origin master |