git学习笔记

学习 https://www.git-scm.com/book/zh/v2/ 记录

 

 

https://www.git-scm.com/book/zh/v2/ #学习站点

 

git三种状态 : 

    已提交 committed 数据已经保存到本地数据库中

    已修改 modified  修改了文件,但是还没保存到数据库

    已暂存 staged   对一个已修改的文件当前版本做了标记,使之包含在下次提交的快照中

工作目录,暂存区域,git仓库

    工作目录 对于项目的某个版本提取的内容,放在磁盘供修改   

    暂存区域 是一个文件,保存了下次要提交的文件列表信息,一般在git目录中。

    git仓库 保存项目的元数据和对象数据库

 

#安装

    sudo yum install -y git;

#设置用户名与邮箱 (设置之后无需再设置 如果需要指定文件夹下单独账号 去掉global设置)

    git config --global user.name "youname"

    git config --global user.email "youemail@email.com"

#设置编辑器 默认vim

    git config --global core.editor emacs

#检查配置信息

    git config --list

#检查某一项配置

    git cofig [配置名 如 user.name]

#获取帮助

    git help 命令

    git 命令 --help

    man git-命令

    如 git help config,git config --help,man git-config

#如果目录不存在 创建他 并初始化git仓库 [在当前目录下创建一个.git文件夹 包含仓库所需文件]

    git init

#如果目录已存在 则进行跟踪

    git add *.c

    git add LICENSE

    git commit -m '初始项目版本'

#克隆仓库 

    #克隆现有仓库 

        git clone url 

        例如: git clone https://github.com/libgit2/libgit2 会在当前目录下创建一个libgit2目录 并且包含远程仓库的所有内容

    #克隆现有仓库 并自定义命名本地文件夹名称

        git clone url dirname 

        例如: git clone https://github.com/libgit2/libgit2 mylibgit

    #备注 git支持多种协议 https:// git:// user@server:path/to/repo.git

#查看仓库状态[查看是否出现新更改 如果为空 则没有新的修改]

    #查看详细状态

        git status

    #查看简要信息

        git status -s   , git status --short

        #

        ?? 标记 : 新添加 未跟踪

        MM 左边的M 被修改 并放入暂存区 右边的M 被修改 没有放入暂存区

         M 被修改 但是未放入暂存区

        M  被修改 并放入暂存区

        A  被修改了 并把修改放入了暂存区

    #查看尚未暂存 详细信息

        git diff

    #查看已暂存添加到下次提交的内容里

        git diff --cached

#跟踪文件

    git add 文件名

#忽略指定文件 创建 .gitignore [不想提交到git 并且不让git提示到]

    cat .gitignore

        *.[oa]  #忽略以.o 或.a结尾的文件

        *~      #忽略所有以~符结尾的文件

    #.gitignore规范

        所有空行或者以#开头的行都会被Git忽略

        可以使用glob模式匹配

        匹配模式可以(/)开头防止递归

        匹配模式可以(/)结尾指定目录

        要忽略指定模式以外的文件或目录,可以在模式前面加上惊叹号(!)取反

#提交 [git commit 提交的是已存放在暂存区的内容[git add过后的]]

    #直接命令行填写注释

        git commit -m '提交备注' 

    #提交之前先用git status 查看哪些修改还没有git add过  [会进入vim提示编写本次提交的备注]

        git commit

    #把git diff信息填充到编辑器内 再进行编写备注 

        git commit -v 

    #跳过暂存区域 直接提交所有跟踪过的文件 [免去 git add 但是之前必须已经 git add过]

        git commit -a

#移除文件

    #删除暂存区[已跟踪文件] 并 删除本地文件 [如果是新建文件 提示已加入暂存区,可以添加 -f 强制删除  如果已提交过 可以直接删除]

        git rm 文件名            #指定文件删除

        git rm log/\*.log        #glob模式

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

    #也可以先手动删除文件

        rm 文件名 #先删除本地文件

        git rm 文件名 #再删除缓存区文件

    #只从版本库[暂存区]删除 本地保留 [防止误操作提交重要文件或无用文件]

        git rm --cached 文件名    #指定文件删除

#修改文件名

    git mv 文件名 新文件名  # 执行三次操作 : mv 文件名 新问假名; git rm 文件名 ; git add 新文件名;

#查看提交历史

    git log

    #参数

        -p      #显示每次提交内容的差异 

        -number #显示最近number次 整数 例:12345678

        --stat  #显示简略信息

        --pretty = #指定不同默认格式展示提交历史[美化显示]

                oneline #每个提交在第一行显示[显示自己提交的备注]

                short   #显示作者 名字 邮箱 及 sha1字符串

                full    #显示作者 提交者 名字邮箱及sha1字符串

                fuller  #显示作者 提交者 名字邮箱及sha1字符串 作者创建日期 提交者提交日期

                format: #定制显示记录格式

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

                        %h  #提交对象的简短哈希字串

                        %T  #树对象(tree)的完整哈希字串

                        %t  #树对象的简短哈希字串

                        %P  #父对象(parent)的完整哈希字串

                        %p  #父对象的简短哈希字串

                        %an  #作者(author)的名字

                        %ae  #作者的电子邮件地址

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

                        %ar  #作者修订日期,按多久以前的方式显示

                        %cn  #提交者(committer)的名字

                        %ce  #提交者的电子邮件地址

                        %cd  #提交日期

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

                        %s  #提交说明

        #例:

            git log -p -2

            git log --stat

            git log --pretty=oneline

            git log --pretty=format:"%h %s"

            git log --pretty=format:"%h %s" --graph # 网站说 --graph 很有效结合 但是只是在 简短sha1字符串前面加上了 * 号 代表省略吗?[发现啦 上面说是会给显示图形那样]

    #git log 常用选项

        -(n) #仅显示最近的 n 条提交

        --since, --after #仅显示指定时间之后的提交。

        --until, --before #仅显示指定时间之前的提交。

        --author #仅显示指定作者相关的提交。

        --committer #仅显示指定提交者相关的提交。

        --grep #仅显示含指定关键字的提交

        -S #仅显示添加或移除了某个关键字的提交

        #例

            git log --pretty="%h - %s" --author=gitster --since="2008-10-01" --before="2008-11-01" --no-merges -- t/

#撤销操作

    #提交完毕 之后发现部分文件没有提交 或者备注写错了 进行重新提交

        git commit --amend

        #例 第二次提交 会覆盖第一次提交

            $ git commit -m 'initial commit'

            $ git add forgotten_file

            $ git commit --amend

    #取消暂存的文件 如果一次暂存了两个文件[也可以是多个 这里只是举例] 但是这两个文件要分为两次提交

        git reset HEAD 要撤销的文件名

    #撤销对文件的修改

        git checkout -- 文件名

    #备注 : 所有已经提交的 都是可以恢复的 不管是删除 覆盖 撤销 但是未提交的就是真的没有了!!

#远程仓库使用

    #查看远程仓库

        git remote

    #查看远程仓库并显示url [如果有多人合作的 则会显示全部人的信息  有多个]

        git remote -v

    #添加远程仓库

        git remote add 简称[自定义命名] git远程仓库地址

        #例 [拉取之前需要现在目录初始化 git init 然后就可以添加远程仓库了]

            git remote add pb https://github.com/paulboone/ticgit

    #从远程仓库拉取更新

        git fetch  远程名 #只是拉取 并不会自动合并 也不会有数据 只是拥有那个远程仓库中所有分支的引用,可以随时合并或查看。

                         #实验发现是从远程仓库拉取 但是不会合并提交 需要自己手动操作:手动跟踪 手动提交 

                         #如果实验出错 删除测试目录 重新建立一个 测试 多测试几遍

        #例

            git fetch pb

    #如果你有一个分支设置为跟踪一个远程分支 自动的抓取然后合并远程分支到当前分支[更方便]

        git pull #从最初的克隆服务器上抓取数据并尝试合并

                 #使用git clone 会自动生成默认仓库名 'origin ' 

    #推送到远程仓库

        git push [远程名] [分支名称]

        #例 

            git push origin master #如果其他人在你之前提交过更新 那么你就要先把他们的合并到你的分支中 然后再进行提交

                                    #当然 你还要有写权限

    #查看远程仓库

        git remote show [远程名] #显示远程url以及跟踪分支信息 你在哪个分支 以及 git pull会抓区并合并

        #例

            git remote show origin

    #远程仓库 移除与重命名

        #重命名 

            git remote rename 旧名字 新名字 #也会修改自己在远程服务器上的名字 

        #移除远程仓库 或者某一个贡献者不再贡献

            git remote rm 远程名

#打标签

    #显示所有标签

        git tag

    #指定参数显示

        git tag -l 'v1.8.5*'

    #标签分为 轻量标签 附注标签

        #附注标签 储存在git数据库的完整对象 包含很多信息 [这里的 -m 提交只是提交至版本 与 commit提交不相关 ,如果要提交 则需要在版本后再提交一次(目前测试是这样的)]

            git tag -a 版本 -m "备注"

            #查看指定标签与对应的提交信息

                git show 版本号

        #轻量标签 不会改变分支,只是特定提交的引用 只显示提交信息

           git tag 版本号

    #后期打标签

        git tag -a 版本号 版本的sha1字符串 

    #检出标签 可以切换至 指定版本 但是存在危险性[文档这样说的 会导致版本错乱 可怕 不要用 还是用commit吧]

        git checkout -b [branchname] [tagname]

        #例

            git checkout -b version2 v2.0.0

#git 别名

    git config --global aliso.别名 命令名

    #例:   

        git config --global aliso.cit commit #把 commit 重命名为 cit 

        #如果需要使用

            git cit # 等同于 git commit

    #长命令别名

        git config --global alias.last 'log -1 HEAD' #给很长的命令加上引号就可以了

        #例 使用

            git last 文件名 # 等同于 git log -1 HEAD 文件名

    #git自定义外部命令 在外部命令前面加上 !

        git config --global alias.别名 '!外部命令'

        #例

            git config --global alias.ls '!ls -l' # 执行git ls 就等同于执行外部命令 ls -l 注意 要在外部命令前面加上'!'

#2.8总结  https://www.git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%80%BB%E7%BB%93

    #现在已经完成所有git基本操作 创建或克隆一个仓库 做更改 暂存并提交这些更改 浏览你的仓库从创建到现在的所有历史

 

posted @   夏秋初  阅读(124)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示