工作区和暂存区
工作区(Working Directory)
learngit 文件夹就是一个工作区。
版本库(Repository)
工作区有个隐藏目录 .git ,这个不算工作区,而是 Git 的版本库。
版本库里面的 index(stage) 文件叫暂存区,还有Git为我们自动创建的第一个分支 master ,以及指向 master 的一个指针叫做 HEAD。
我们提到过,如果我们想把文件添加到Git里面时,需要分两步:
第一步是用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区。
第二步是用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。(我们现在只有唯一一个分支 master,所以现在就是往 master 分支上提交更改)
在 readme.txt 文件中加上一行内容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
然后在工作区新建一个 LICENSE 文本文档(任意内容)
使用两次 git add
命令分别把 readme.txt 和 LICENSE 都添加后,可以用 git status
命令查看一下:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: LICENSE
modified: readme.txt
现在,暂存区的状态就变成:
再使用 git commit
命令把暂存区的所有修改提交到分支:
$ git commit -m "understand how stage works"
[master e43a48b] understand how stage works
2 files changed, 2 insertions(+)
create mode 100644 LICENSE
这时候版本库就变成了这样:
在工作中操作git
1、git clone 仓库地址 -------------- 拉取仓库代码
2. git chackout [分支名] -------------- 切换分支 git checkout -b [分支名] --- 创建并切换分支
3. git status -------------- 检查更新
4. git add . -------------- 添加更新
5. git commit -m -------------- 添加注释
6. git push -------------- 上传代码
git push --set-upstream origin [分支名] 第一次上传代码
7. git pull [主机名] [分支名]
8. git branch -d [分支名] ---------- 删除分支
git push origin --delete [分支名] 删除远程分支
git push origin :[分支名]
9. git diff --------------显示暂存区和工作区的差异
git diff [first-分支名]...[second-分支名] --------------显示两次提交差异
10. git branch -------------- 显示所有分支
git branch -r -------------- 列出所有远程分支
11. git branch [分支名] -------------- 新建一个分支并停留在原来的分支
12. git merge [分支名] -------------- 将分支合并到当前分支
13. git log -------------- 显示当前分支的版本历史
14. git fetch -------------- 下载所有远程仓库的变动
15. git remote -v -------------- 显示所有远程仓库
16. git rebase -------------- 合并本地
17. 回滚代码(谨用)
- git log
- git reset --hard (版本号) ------撤销该commit_id之后的代码
- git revert (版本号) ------ 撤销某个commit_id 不影响该commit 之后的代码
- git revert -m (版本号) ------ 如果是从别的分支过来的就需要这样
- git revert --no-commit commit1..commit2 (连着撤销几次commit,不包括commit1但包括commit2)