git-基础操作

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,配置用户信息

  1. 配置用户名:git config –global user.name “your name”;
  2. 配置用户邮箱: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

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
My Show My Code