[笔记]Pro Git第二版

电子版章节来自于:https://git-scm.com/book/en/v2

中文书名精通Git(第二版)。

笔记中部分截图来源于书本电子版、runoob的Git专题、网络。

第一章:基本概念 

概念图:

[笔记]Pro Git第二版_第1张图片

                   集中式版本管理系统(SVN)                                                     分布式版本管理系统(GIT)

 

 

Git 采用的校验和机制SHA-1散列,信息的散列值。

 

Git区域:

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

[笔记]Pro Git第二版_第2张图片

 

第二章:Git基础操作

配置 名字 & 邮箱:

          git config --global user.name "Yourname"

          git config --global user.email [email protected]

          git config --global core.editor 设置编辑器

命令别名

          git config --global alias.co checkout

          git config --global alias.ci commit -> git commit git ci

 

          git config --global alias.unstage 'reset HEAD --'  -> git unstage fileA = git reset HEAD --fileA

          git config --global alias.last 'log -1 HEAD' ->git last 查看最后一次提交信息

 

          git config --global credential.helper cache 设置凭据缓存,避免推送都键入密码,设置Time

 

常用命令:

          git config --list 检查个人设置

          git help / git --help 例如 git help config 获取帮助

          git init -- 初始化,对现有项目进行跟踪管理 master(初始分支的默认名称)

          git clone [url] -- 克隆仓库 origin 远程仓库的默认名称

          git status -- 查看当前文件状态

                          -s 显示简洁状态信息 /*??未被跟踪的新文件 A已暂存的新文件 M已修改的文件*/

[笔记]Pro Git第二版_第3张图片

 

          git add xxx -- 跟踪新文件/暂存文件/存在合并冲突的文件记为已解决/理解为“添加内容到下一次提交中”

          cat .gitignore -- 忽略文件格式参考: https://github.com/github/gitignore

 

          git diff --查看不同内容对比,只显示出还没有进入暂存区的变更。

                     --staged / --cached 查看哪些已暂存的内容会进入下一次提交

          git commit --提交变更,打开所选择的文本编辑器,填入备注信息(本地版本库)

                           -m "所需要的备注信息"

                            -a --跳过暂存区提交(git自动把已跟踪的所有文件添加到暂存区)

                           --amend重新提交,第二个提交命令修正第一个提交的结果

          

 

          git rm xxx -- 从暂存区移除

                           --cached xxx

Example:

          git rm log/\*.log 移除log目录中所有扩展名为.log的文件

          git rm \*~ 移除所有以~结尾的文件

          rm xxx --删除文件

 

          git mv xxx www --移动文件/重命名

          git log -- 查看提交历史

                    -p -2 显示出最近2次提交说引入的差异

                    --stat 简要统计信息

                    --since=2.weeks 时间限制输出

                    --author查找某位作者的提交

                    -S过滤

                    --pretty 更改日志输出的默认格式 例如:

          pretty=oneline/short/full/fuller/format:"%h - %an, %ar : %s"

          format格式:

                    %H 提交对象(commit)的完整哈希字串%h 提交对象的简短哈希字串

                    %T 树对象(tree)的完整哈希字串%t 树对象的简短哈希字串

                    %P 父对象(parent)的完整哈希字串%p 父对象的简短哈希字串

                    %an 作者(author)的名字%ae 作者的电子邮件地址

                    %ad 作者修订日期(可以用-date= 选项定制格式)

                    %ar 作者修订日期,按多久以前的方式显示%cn 提交者(committer)的名字

                    %ce 提交者的电子邮件地址%cd 提交日期

                    %cr 提交日期,按多久以前的方式显示%s 提交说明

          git reset HEAD xxx 撤销已暂存的文件

          git checkout -- xxx 撤销对文件的修改

          git remote -v 显示远程仓库对应URL

          git remote 查看当前配置有哪些远程仓库,

          git remote add [shortname] [url] 添加一个远程仓库

          git fetch[remote-name] 从远程项目获取数据

          git push [remote-name][branch-name] 将数据推送到远程仓库

          git remote show [remote-name] 检查远程仓库信息

 

          git remote rename [oldname] [newname] 重命名远程仓库 分支名称也会改变

          git remote rm [协作者的名字] 删除某个远程仓库地址

标签:

          git tag 列举标签

Example:

          git tag -a v1.4 -m "myversion 1.4" -a创建注释标签 -m随标签创建而存储

          git show v1.4 看到标签数据信息以及对应的提交

          git tag v1.4-lw 轻量标签

 

补加标签

          git log --pretty=oneline 查询到SHA-1

          git tag -a v0.1 SHA-1前几位

共享标签

          git push xx [tagname]

          git push xx --tags推送所有tags

 

          git checkout -b [branchname] [tagname] 检出标签

 

第三章-分支机制

3.1.1创建新分支

          git branch [name]

          git log --oneline --decorate 查看分支指向对象

                    [笔记]Pro Git第二版_第4张图片

 

3.1.2切换分支

          git checkout [name]

          切换分支commit之后,再切换回master分支,工作目录下的文件已恢复到master分支指向的快照状态,回滚了在checkout分支后的工作。

          此时再修改,commit一次,将出现分叉,得到新的分支。

          利用 git log --oneline --decorate --graph --all 可以看到分叉的信息

                   [笔记]Pro Git第二版_第5张图片

 

3.2 基本的分支与合并操作

          git checkout -b [name] -> git branch [name] & git checkout [name]

          git checkout -b Abranch origin/Abranch 创建自己的本地Abranch分支

          制作热补丁,并入分支 git merge [name]

           "fast-forward"顺着其中一个提交历史直达另一个提交,简化合并操作,移动指针。

          [笔记]Pro Git第二版_第6张图片

 

          删除分支 git branch -d [name] -D强制删除

          图形化工具解决冲突 git mergetool

3.3分支管理

          git branch 分支简短列表,*当前所在分支(HEAD指向的分支)

                           -v 查看最新提交

[笔记]Pro Git第二版_第7张图片

 

          git branch --merged 筛选已并入当前分支的所有分支

          git branch --no-merged 筛选尚未并入的所有分支

长期分支

          master develop topic 对应不同的开发周期不同阶段

          主题分支-本地仓库进行

远程分支

          指向远程仓库的分支指针,自动更新,类似书签。

          git fetch origin[name] 与服务器同步

 

3.5推送

          与别人共享某个分支上的工作成果

          git push [remoteName] [branchName]:otherName

3.5.2跟踪分支

          自己选择设置其他的跟踪分支,在本地创建分支用跟踪远端非master分支

          git checkout -b [branch] [remotename]/[branch]origin/special

          git checkout --track [remotename]/[branch]

          本地已存在的分支设置跟踪分支,或者更改本地分支对应的远程分支

          git branch -u [remotename]/[branch]

          git branch -vv查看已经设置了哪些分支

3.5.3拉取

          git fetch 拉取本地没有的远程所有最新的数据

          git pull等同于 git fetch->git merge

3.5.4删除远程分支

          git push origin --delete [branch]

3.6变基

          更改一个分支整合到另一个分支,两种方式:merge or rebase

3.6.1基本变基

          找到两个要整合的分支的共同祖先,取得当前所在分支的每次更变(diff)

          git rebase [branch]

          变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是找出两个分支末端,并把它们合在一起。

3.6.2分支工作在变基目标分支之外的分支上重现

          git rebase --onto master server client

 

[笔记]Pro Git第二版_第8张图片

[笔记]Pro Git第二版_第9张图片 

 

          对master分支进行快速合并操作

          git checkout master

          git merge client

效果如图:

[笔记]Pro Git第二版_第10张图片

          git rebase master server

 

[笔记]Pro Git第二版_第11张图片

 

          git checkout master -> git merge server

          git branch -d client ->git branch -d server

 

3.6.3rebase的潜在危险

          不要对已经推送到远程服务器的提交执行变基。

 

你可能感兴趣的:(工具)