git的组成结构
主要涉及到四个关键点:
- 工作区:本地电脑存放项目文件的地方,比如learnGitProject文件夹;
- 暂存区(Index/Stage):在使用git管理项目文件的时候,其本地的项目文件会多出一个.git的文件夹,将这个.git文件夹称之为版本库。其中.git文件夹中包含了两个部分,一个是暂存区(Index或者Stage),顾名思义就是暂时存放文件的地方,通常使用add命令将工作区的文件添加到暂存区里;
- 本地仓库:.git文件夹里还包括git自动创建的master分支,并且将HEAD指针指向master分支。使用commit命令可以将暂存区中的文件添加到本地仓库中;
- 远程仓库:不是在本地仓库中,项目代码在远程git服务器上,比如项目放在github上,就是一个远程仓库,通常使用clone命令将远程仓库拷贝到本地仓库中,开发后推送到远程仓库中即可;
日常开发时代码实际上放置在工作区中,也就是本地的XXX.java这些文件,通过add等这些命令将代码文教提交给暂存区(Index/Stage),也就意味着代码全权交给了git进行管理,之后通过commit等命令将暂存区提交给master分支上,也就是意味打了一个版本,也可以说代码提交到了本地仓库中.
另外,团队协作过程中自然而然还涉及到与远程仓库的交互。因此,经过这样的分析,git命令可以分为这样的逻辑进行理解和记忆:
- git管理配置的命令
- 工作区与暂存区的交互
- 暂存区与本地仓库(分支)上的交互
- 本地仓库与远程仓库的交互
git管理配置的命令
查询配置信息
- 列出当前配置:git config –list;
- 列出repository配置:git config –local –list;
- 列出全局配置:git config –global –list;
- 列出系统配置:git config –system –list;
第一次使用git,配置用户信息
- 配置用户名:git config –global user.name “your name”;
- 配置用户邮箱:git config –global user.email “youremail@github.com“;
工作区与暂存区的交互
新建仓库
- 将工作区中的项目文件使用git进行管理,即创建一个新的本地仓库:
git init
; - 从远程git仓库复制项目:
git clone <url>
提交文件到暂存区
- 提交工作区所有文件到暂存区:
git add .
- 提交工作区中指定文件到暂存区:
git add <file1> <file2> ...
- 提交工作区中某个文件夹中所有文件到暂存区:
git add [dir]
撤销
- 删除工作区文件,并且也从暂存区删除对应文件的记录:
git rm <file1> <file2>
- 从暂存区中删除文件,但是工作区依然还有该文件:
git rm --cached <file>
- 取消暂存区已经暂存的文件:
git checkout --<file>
- 隐藏当前变更,以便能够切换分支:
git stash
- 应用最新的储藏:
git stash apply --index
查看信息
- 查询当前工作区所有文件的状态:
git status
- 比较工作区中当前文件和暂存区之间的差异,也就是修改之后还没有暂存的内容:
git diff
- 指定文件在工作区和暂存区上差异比较:
git diff <file-name>
暂存区与本地仓库(分支)上的交互
提交文件到版本库
- 将暂存区中的文件提交到本地仓库中,即打上新版本:
git commit -m "commit_info"
- 将所有已经使用git管理过的文件暂存后一并提交,跳过add到暂存区的过程:
git commit -a -m "commit_info"
- 提交文件时,发现漏掉几个文件,或者注释写错了,可以撤销上一次提交:
git commit --amend
查看信息
- 比较暂存区与上一版本的差异
git diff --cached
- 指定文件在暂存区和本地仓库的不同:
git diff <file-name> --cached
- 查看提交历史:
git log
参数-p展开每次提交的内容差异,用-2显示最近的两次更新,如git log -p -2
打tag
- 列出现在所有的标签:
git tag
- 创建一个轻量级标签:
git tag <tag-name>
- 将标签推送到远程仓库中:
git push origin <tag-name>
- 将本地所有的标签全部推送到远程仓库中:
git push origin --tags
分支管理
- 创建分支:
git branch <branch-name>
- 从当前所处的分支切换到其他分支:
git checkout <branch-name>
- 新建并切换到新建分支上:
git checkout -b <branch-name>
- 删除分支:
git branch -d <branch-name>
- 将当前分支与指定分支进行合并:
git merge <branch-name>
- 显示本地仓库的所有分支:
git branch
- 查看各个分支最后一个提交对象的信息:
git branch -v
- 查看哪些分支已经合并到当前分支:
git branch --merged
- 查看当前哪些分支还没有合并到当前分支:
git branch --no-merged
- 把远程分支合并到当前分支:
git merge <remote-name>/<branch-name>
- 在远程分支的基础上创建新的本地分支:
git checkout -b <branch-name> <remote-name>/<branch-name>
- 从远程分支checkout出来的本地分支,称之为跟踪分支。在跟踪分支上向远程分支上推送内容:
git push
- 从远程分支checkout出来的本地分支,称之为跟踪分支。在跟踪分支上合并远程分支:
git pull
本地仓库与远程仓库的交互
- 查看本地仓库关联的远程仓库:
git remote -v
,在克隆完每个远程仓库后,远程仓库默认为origin - 添加远程仓库:
git remote add [remote-name] [url]
- 从远程仓库更新本地仓库的当前分支:
git pull
- 将本地仓库某分支推送到远程仓库上:
git push [remote-name] [branch-name]
,如git push origin master
- 查看远程仓库的详细信息:
git remote show origin
- 移除远程仓库:
git remote rm [remote-name]
忽略文件.gitignore
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。