1.工作区与暂存区
- git diff 比较的是工作区文件与暂存区文件的区别(上次git add 的内容)
- git diff --cached 比较的是暂存区的文件与仓库分支里(上次git commit 后的内容)的区别
- git diff HEAD --file可以查看工作区和版本库的内容区别
2.撤销修改
git checkout -- file可以丢弃工作区的修改:
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
Git同样告诉我们,用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。
3.版本回退
1.git reflog得到各个版本的commit id号
2.使用命令git reset --hard commit_id回退到特定版本(id号可以只写5位)
4.删除文件
- rm file命令可以删除工作区文件,此时git statue查看状态可知工作区和版本库文件不一致,文件被删除。
- 如果确实要删除版本库的文件,执行命令 git rm file,并提交 git commit -m "#"。
- 如果误删除文件,想要恢复,执行命令 git checkout file。可以从暂存区恢复到最新版本。但会丢失最后一次提交后修改的内容。
- 如果执行git rm file并提交。想恢复文件,只能进行版本回退。
5.远程仓库 -- 添加远程库
- 主目录下创建ssh key。使用命令$ ssh-keygen -t rsa -C "youremail@example.com"。一路回车。
- 登录github,->setting->ssh keys->add ssh keys->任意title,在key中粘贴id_rsa.pub内容->提交。
- 登录GitHub,创建一个新项目,得到新仓库。
- 在本地仓库下运行命令$ git remote add origin git@github.com:(GitHub用户名)/(创建时的name).git.在本地仓库执行$ git push -u origin master。我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
- 从现在起,只要本地作了提交,就可以通过命令:$ git push origin master。
6.远程仓库 -- 从远程库克隆
- 首先要知道远程库地址
- 执行命令 $ git clone git@github.com:(用户名)/(仓库名).git
7.创建于合并分支
- 查看分支:git branch
- 创建分支:git branch <name>
- 切换分支:git checkout <name>
- 创建+切换分支:git checkout -b <name>
- 合并某分支到当前分支:gut merge <name>
- 删除分支:git branch -d <name>
7.bug分支
- Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。
- 切换到相应的分支,创建分支修复bug。
- 切换分支并合并。删除bug分支。
- git stash list可以查看被保存的工作现场。
- 恢复工作现场: 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除; 另一种方式是用git stash pop,恢复的同时把stash内容也删了:
- $ git stash apply stash@{0}可以指定恢复工作现场。
- 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
8.总结
备份本地代码到远程仓库全过程:
- GitHub新建一个仓库。
- 在本地克隆GitHub新建的仓库。
- 将代码文件全部添加到暂存区:git add .
- 将代码文件全部提交到本地仓库。
- 将本地仓库push到github:git push -u origin master(-u 参数只在第一次push时使用)。
备注:
如果在第三步出现错误:fatal: Not a git repository (or any of the parent directories): .git
先执行代码 git init 再进行添加。
如果在第五步出现错误:fatal: 'origin' does not appear to be a git repository
先执行代码$ git remote add origin git@github.com:yourusername/test.git 再进行push