《ProGit》阅读笔记

Git

  • 三种状态
    • 已提交(committed):表示数据已经安全的 保存在本地数据库中
    • 已修改(modified):表示修改了文件,但还没保存到数据库中
    • 已暂存(staged):表示对一个已修改文件的当前 版本做了标记,使之包含在下次提交的快照中

由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。
在这里插入图片描述
文件的状态变化周期
在这里插入图片描述

基础命令

  • 全局用户信息
  git config --global user.name "FangJu"
  git config --global user.email "[email protected]"
  • 单个项目用户信息
  git config user.name "FangJu"
  git config user.email "[email protected]"
  • 检查配置信息
  git config --list
  • 在现有目录中初始化仓库
  git init
  • 跟踪新文件(添加内容到下一次提交中)
  git add <filename>

git add -A 提交所有变化
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

  • 提交更新
  git commit -m "commit description"  
  git commit -a -m "commit description"  #跳过使用暂存区域

提交完成后,会看到是在哪个分支提交的,这次提交的完成的SHA-1校验和(由40位16进制组成),以及本次提交文件增减情况
注:提交记录是对暂存区文件的提交,其他已修改但未暂存的文件可以在下次提交修改

  • 克隆现有的仓库
  git clone [url]
  • 查看当前文件状态
  git status
  • 状态简览
  git status -s

三种标识符:“??”代表新添加的未跟踪文件;“M”可能出现在两个位置,在左边代表修改过并放入了暂存区,在右边代表修改过没被放入暂存区;“A”代表新添加到暂存区的文件

  • 查看已暂存和未暂存的修改
  git diff  
  git diff --cached  
  git diff --staged

git diff本身只显示尚未暂存的改动,而不是上次提交以来所作的所有改动

  • 从暂存区删除文件
  git rm <filename>  
  git rm -f <filename>

会从工作目录中删除文件

  • 从暂存区移除文件
  git rm --cached <filename>

只会从git的暂存区中移除,不会从磁盘中删除

  • 移动文件
  git mv file_from file_to

git mv相当于运行了下面三条命令
mv file_from file_to
git rm file_from
git add file_to

  • 查看提交历史
  git log  
  git log -p  #并显示每次提交的内容差异
  git log -p -2   #并显示最近两次  
  git log --stat    #附带一些总结性信息  
  git log --pretty=oneline  #一行显示  
  git log --pretty=format:"%h "   #特定格式显示  
  git log --pretty=format:"%h %s" --graph   #输出树图
  • 取消暂存的文件
  git commit --amend

自上次提交以来还未做任何修改就使用此命令,则快照不变,修改的只是提交描述信息

  • 取消暂存的文件
  git reset HEAD <filename>

虽然在调用时加上 --hard 选项可以令 git reset 成为一个危险的命令(可能导致工作目录中所有当前进度丢失!),但本例中工作目录内的文件并不会被修改。 不加选项地调用 git reset 并不危险,它只会修改暂存区域

  • 查看远程仓库
  git remote  
  git remote -v   #并显示url
  • 添加远程仓库
  git remote add <shortname> <url>
  • 从远程仓库中抓取与拉取
  git fetch [remote-name]  #拉取之后不会合并
  git pull  #拉取之后会合并到本地分支
  • 推送到远程仓库
  git push origin master
  • 查看某个远程仓库
  git remote show origin
  • 远程仓库的移除与重命名
  git remote rename oldname newname
  git remote
  • 修改本地以及远程分支的名称
  git branch -m <old_branch> <new_branch>	#修改本地分支的名称
  git push origin :<old_branch>		#删除远程分支
  git push --set-upstream origin <new_branch>	#新增远程分支
  • 列出标签
  git tag
  • 创建附注标签
  git tag -a v1.4 -m "new version 1.4"
  • 后期打标签
  git tag -a v1.2 <commit id>
  • 共享标签
  git push origin [tagname]
  git push origin --tags    #推送所有标签
  • 删除标签
  git tag -d <tagname>  
  git push <remote> :refs/tags/<tagname>  	#远程同步
  • 检出标签
  git checkout <tagname>

这会使你的仓库处于分离头指针状态,在此状态下如果你做了某些更改并提交了它们,标签不会发生变化,但你的新提交不属于任何一个分支,并且将无法访问,除非确切的提交哈希。

  • Git别名
  git config --global alias.unstage 'reset HEAD --'

即之后git unstage fileA与git reset HEAD – fileA等价

Git分支

在进行提交操作时,Git 会保存一个提交对象(commit object)。知道了 Git 保存数据的方式,我们可以很自 然的想到——该提交对象会包含一个指向暂存内容快照的指针。 但不仅仅是这样,该提交对象还包含了作者的姓 名和邮箱、提交时输入的信息以及指向它的父对象的指针。首次提交产生的提交对象没有父对象,普通提交操作 产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象。当使用 git commit 进行提交操作时,Git 会先计算每一个子目录(本例中只有项目根目录)的校验和,然后在 Git 仓库中这些校验和保存为树对象。 随后,Git 便会创建一个提交对象,它除了包含上面提到的那些信息外, 还包含指向这个树对象(项目根目录)的指针。如此一来,Git 就可以在需要的时候重现此次保存的快照。

  • 分支创建
  git branch testing
  • 查看各个分支所指对象
  git log --oneline --decorate
  • 分支切换
  git checkout <branchname>
  • 分支合并
  git merge <branchname>

同一个父节点的分支合并时只会增减代码,不会产生冲突;不同父节点的分支合并时,对同一个文件的同一个部分进行了不同的修改,Git就没法干净的合并它们,这时候需要自己解决冲突

  • 查看每个分支最后一次提交
  git branch -v
  • 查看哪些分支合并到了当前分支
  git branch --merged
  • 查看所有包含未合并工作的分支
  git branch --no-merged
  • 显式获得远程引用的完整列表
  git ls-remote
  git remote show   #获得远程分支的更多信息
发布了110 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40833790/article/details/103191332
今日推荐