美文网首页
# Pro Git 阅读笔记

# Pro Git 阅读笔记

作者: 简流星 | 来源:发表于2021-06-18 13:46 被阅读0次

    第 1 章:起步

    1.1 初次运行 Git 前的配置

    • /etc/gitconfig 文件:

      系统中对所有用户都普遍适用的配置。使用 --system 选项读写。

    • ~/.gitconfig 文件:

      用户目录下的配置文件只适用于该用户。使用 --global 选项读写。

      在 Windows 下路径为:C:\Documents and Settings\$USER\.gitconfig。

    • .git/config 文件:

      这里的配置仅仅针对当前项目有效。

    配置用户信息

    $ git config --global user.name "John Doe"
    $ git config --global user.email johndoe@example.com
    

    配置文本编辑器

    $ git config --global core.editor code
    

    配置差异分析工具

    $ git config --global merge.tool code
    

    查看配置信息

    $ git config --list
    

    1.2 获取帮助

    $ git help <verb>
    $ git <verb> --help
    $ man git-<verb>
    

    第2章 Git 基础

    2.1 获取项目的 Git 仓库

    在工作目录初始化新仓库

    $ git init
    

    从现有仓库克隆

    $ git clone https://github.com/schacon/grit.git
    

    2.2 记录每次更新到仓库

    文件状态的变化周期

    image

    检查当前文件状态

    $ git status
    

    跟踪新文件或暂存已修改文件

    $ git add [file or folder path]
    

    忽略某些文件

    .gitignore 文件的格式规范:

    • 空行和注释(#)被 Git 忽略
    • 可以使用标准的 glob 模式匹配
    • 匹配模式最后跟 / 说明要忽略的是目录
    • 要忽略指定模式模式意外的文件或目录,可以在模式前加上 !取反。

    .gitignore 文件例子:

    # 忽略以 .a 结尾的文件
    *.a 
    # 但 lib.a 除外
    !lib.a
    # 仅仅忽略根目录下的 TODO 文件,但不包括子目录下的 TODO
    /TODO
    # 忽略 build/ 目录下的所有文件
    build/
    # 忽略 doc/notes.txt 但不包括 doc/server/arch.txt
    doc/*.txt
    

    查看已暂存和未暂存的更新

    $ git diff
    

    此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。

    若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用:

    $ git diff --cached
    $ git diff --staged  # 效果一样,但更好记。
    

    提交更新

    $ git commit -m "Fix benchmarks for speed"
    

    跳过使用暂存区域

    在提交的时候,添加 -a 选项,则可以跳过使用暂存区,直接提交。

    $ git commit -a -m "Fix benchmarks for speed"
    # 相当于(只对修改过的文件有效)。
    $ git add .; git commit -m "Fix benchmarks for speed"
    

    删除文件

    要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(从暂存区域移除),然后提交。

    $ git rm hello.txt
    

    移动文件

    $ git mv old-filepath new-filepath
    

    2.3 查看提交历史

    $ git log
    

    默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。

    git log 的一些选项:

    • -p

      展示每次提交内容的差异

    • -2

      仅显示最近两次的提交

    • --stat

      显示监要的增改函数的统计

    • --pretty=oneline

      将每个提交放在一行显示(完整哈希)

    • --pretty=format:"%h - %an, %ar : %s"

      以格式化的方式显示提交信息

    • --graph

      以图的方式显示

    • --oneline

      将每个提交放在一行显示(简短哈希)

    限制记录范围

    使用一下一些选项,可以限制记录的范围:

    • --since, --after

      仅显示指定时间之后的提交

    • --until, --before

      仅显示指定时间之前的提交

    • --author

      仅显示指定作者的提交

    • --committer

      仅显示指定提交者的提交

    • --grep

      仅显示包含选项关键字的提交

    $ git log --since=2.weeks
    $ git log --pretty="%h - %s" --author=gister --since="2008-01-15" --before="2008-11-01"
    

    2.4 撤销操作

    修改最后一次提交

    有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 --amend 选项重新提交:

    $ git commit -amend -m "message"
    

    取消已经暂存的文件

    $ git reset HEAD <file>...
    

    取消对文件的修改

    $ git checkout <file>...
    

    2.5 远程仓库的使用

    查看当前的远程库

    $ git remote -v
    $ git remote --verbose
    

    添加远程仓库

    $ git remote add [remote-name] [remote-repo-url]
    

    从远程仓库抓取数据

    $ git fetch [remote-name]
    

    如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。

    $ git fetch origin
    

    推送数据到远程仓库

    $ git push [remote-name] [branch-name]
    $ git push origin master # 默认就是 origin 和 master
    

    查看远程仓库信息

    $ git remote show [remote-name]
    

    远程仓库的删除和重命名

    $ git remote remove <remote-name>
    $ git remote rename <remote-old-name> <remote-new-name>
    

    2.6 打标签

    列显已有的标签

    $ git tag
    

    新建标签

    Git 使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。

    轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。

    含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。

    含附注的标签(使用 -a)

    $ git tag -a v1.4 -m "version 1.4"
    

    轻量级标签

    $ git tag v1.4-lightweight  # 不用 -a 即创建轻量级的标签
    

    后期加注标签(从以前的提交创建标签)

    git tag -a v1.2 9fceb02 
    

    可以使用 git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。

    $ git show v1.4
    

    分享标签

    默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。

    $ git push origin v1.4    # 将 v1.4 推送到远程
    $ git push origin --tags  # 将所有的新增的标签推送到远程
    

    第 3 章 Git 分支

    3.1 何谓分支

    Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。Git 会使用 master 作为分支的默认名字。

    Git 是如何知道你当前在哪个分支上工作的呢?其实答案也很简单,它保存着一个名为 HEAD 的特别指针,它是一个指向你正在工作中的本地分支的指针。

    image

    3.2 分支的新建与合并

    新建分支

    # 新建分支
    $ git branch <branch>
    # 切换到分支
    $ git checkout <branch>
    
    # 新建并切换到分支
    $ git checkout -b <branch>
    

    删除分支

    $ git branch -d <branch>
    

    合并分支

    $ git merge <branch>
    

    3.3 分支的管理

    显示前所有分支的清单

    $ git branch
    
    $ git branch -v  # 查看最后一个提交对象的信息
    

    显示已合并或未合并的分支

    $ git branch --merged
    $ git branch --no-merged
    

    3.5 远程分支

    拉取远程数据

    $ git fetch [remote-name]
    

    推送本地分支

    $ git push [remote-name] [branch-name]
    

    跟踪远程分支

    跟踪分支是一种和某个远程分支有直接联系的本地分支。

    # 创建跟踪分支
    $ git checkout -b [branch-name] [remote-name]/[branch-name]
    $ git checkout --track [remote-name]/[branch-name]
    

    删除远程分支

    推送时分支名前面加冒号,可以删除远程分支。

    $ git push [remote-name]:[branch-name]
    

    3.6 rebase

    rebase 命令,可以把在一个分支里提交的改变移到另一个分支里重放一遍。

    $ git rebase <branch-name>
    
    image

    rebase 的风险

    一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。

    相关文章

      网友评论

          本文标题:# Pro Git 阅读笔记

          本文链接:https://www.haomeiwen.com/subject/ftukyltx.html