git学习

git 学习网站推荐 https://learngitbranching.js.org/?locale=zh_CN

git 配置文件

/etc/gitconfig 文件:

包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上–system 选项,那么它就会读写该文件中的配置变量。

~/.gitconfig 或 ~/.config/git/config 文件

只针对当前用户。 你可以传递 --global 选项让Git读写此文件,这会对你系统上所有的仓库生效。

当前使用仓库的 Git 目录中的 config 文件(即 .git/config)

针对该仓库。 你可以传递 --local 选项让 Git 强制读写此文件,虽然默认情况下用的就是它。。 (当然,你需要进入某个 Git 仓库中才能让该选
项生效。)
每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量
在这里插入图片描述

git config --list --show-origin

查看所有的配置以及它们所在的文件

用户信息

git config --global user.name “name”
git config --global user.email xiaqiu@qq.com
在这里插入图片描述

使用了–global 选项,那么该命令只需要运行一次

文本编辑器

git config --global core.editor vscode

检查配置信息

git config --list
在这里插入图片描述

git config 获取某一项配置

在这里插入图片描述

git config --show-origin user.email 获取配置项的文件夹

在这里插入图片描述

获取帮助

git help config
git add -h

Git 基础

repository(仓库),track(开始或停止跟踪文件),stage(暂存),commit(提交),push(推送),pull(拉取)

在已存在目录中初始化仓库

git init

git add 命令来指定所需的文件来进行追踪

git add *.c
git add LICENSE
git commit -m ‘initial project version’

克隆现有的仓库

git clone https://gitee.com/mrxiao_com/gtest.git
git clone https://github.com/libgit2/libgit2 mylibgit 可以额外指定目录

文件的状态变化

在这里插入图片描述

git add 会把文件加入到tracked,之后文件修改进入Modified 状态,未被修改进入Unmodified状态,Commit 之后进入Unmodified 状态,Remove进入Untracked状态。

git status 检查当前文件的状态

在这里插入图片描述

在这里插入图片描述

这说明你现在的工作目录相当干净,已跟踪文件在上次提交后都未被更改过。
项目下创建一个新的 README 文件,之前并不存在这个文件,使用 git status 命令
在这里插入图片描述

README 属于Untracked files,未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件,Git 不会自动将之纳入跟踪范围,这样的处理让你不必担心将生成的二进制文件或其它不想被跟踪的文件包含进来

跟踪新文件

在这里插入图片描述

在 Changes to be committed 这行下面的,就说明是已暂存状态。如果此时提交,那么该文件在你运行 git add 时的版本将被留存在后续的历史记录中。

暂存已修改的文件

修改了已被跟踪的文件,然后运行 git status 命令,会出现下面的内容
在这里插入图片描述

Changes not staged for commit 这行下面的test.md,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。要暂存这次更新,需要运行 git add 命令。
git add 把修改的内容放入暂存区
在这里插入图片描述

Changes to be committed 下的暂存区的文件
对暂存区的文件修改
在这里插入图片描述

现在test.md 同时出现在暂存区和非暂存区,git 只会暂存git add后面的那个版本,而不是git commit时在工作目录中的当前版本。要继续进行git add

状态简览git status -s

在这里插入图片描述

??:新添加的未跟踪文件
A:新添加到暂存区中的文件
M:修改过的文件
MM:文件已修,暂存后又作了修改

忽略文件.gitignore

有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表

git diff 查看已暂存和未暂存的修改

工作目录中当前文件和暂存区域之间的差异,git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动
在这里插入图片描述

在这里插入图片描述

用 git diff --staged 命令。 这条命令将比对已暂存文件与最后一次提交的文件差异
在这里插入图片描述

提交更新git commit

在此之前,请务必确认还有什么已修改或新建的文件还没有git add过, 否则提交的时候不会记录这些尚未暂存的变化, 所
以,每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了, 然后再运行提交命令git commit:
这样会启动你选择的文本编辑器来输入提交说明。
可以通过 git config --global core.editor命令来修改编辑器

跳过使用暂存区域

git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add
在这里插入图片描述

移除文件git rm git commit -a 之后文件就被删除

从暂存区域移除,会出现在“Changes not staged for commit“ 未暂存清单中
在这里插入图片描述

移动文件git mv

在这里插入图片描述

相当于


mv test.md test1.md
git rm test.md
git add test1.md

查看提交历史git log

git log -p 或–patch 输出每次提交的差异
git log --stat 列出所有被修改过的文件,和被修改的行
git log --pretty=oneline 展示提交历史
git log --pretty=format:“%h - %an, %ar : %s” 定制输出提交历史的格式

撤消操作 git commit --amend

git commit --amend 修改提交的comment 或者添加文件重新提交,编辑后保存会覆盖原来的提交信息

取消暂存的文件

修改test1.md, git add test1.md之后
在这里插入图片描述

撤消对文件的修改git checkout

在这里插入图片描述

查看远程仓库

git clone 默认的是origin 分支
在这里插入图片描述

添加远程仓库

添加一个新的远程 Git 仓库到本地,test branch
在这里插入图片描述

git fetch test 从远程仓库获取最新的更新,并将其合并到本地仓库中

在这里插入图片描述

从远程仓库中抓取与拉取

git fetch
该git fetch命令将从远程存储库的提交导入到本地存储库中
生成的提交存储为远程分支,而不是我们一直使用的常规本地分支.这使您有机会在将更改集成到项目副本之前查看更改.

推送到远程仓库

git push
想要将 master 分支推送到 origin 服务器时
git push origin master
当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。

查看某个远程仓库

git remote show
在这里插入图片描述

远程仓库的重命名与移除

git remote rename
在这里插入图片描述

创建标签

在这里插入图片描述

轻量标签

另一种给提交打标签的方式是使用轻量标签。 轻量标签本质上是将提交校验和存储到一个文件中——没有保存任何其他信息。 创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字:
在这里插入图片描述

后期打标签

对过去的历史未打标签的打标签
在这里插入图片描述

git show v0.5 会打印修改的信息

共享标签

git push 命令并不会传送标签到远程仓库服务器上,必须显式地推送标签到共享服务器上
在这里插入图片描述

在这里插入图片描述

git push origin --tags 要一次性推送很多标签

删除标签

git tag -d
git push :refs/tags/
在这里插入图片描述

git push origin --delete
在这里插入图片描述

检出标签

在这里插入图片描述

仓库处于“分离头指针(detached HEAD)”的状态
当前的 HEAD 指向的不是某个分支,而是某个提交记录的状态。这种状态下,你可以在不影响任何分支的情况下进行开发,但是你的改动不会被追踪,也不会被提交到任何分支上。

git 别名

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
在这里插入图片描述

Git 分支

  1. 分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线
  2. Git 保存的不是文件的变化或者差异,而是一系列不同时刻的 快照
  3. 在进行提交操作时,Git 会保存一个提交对象(commit object),提交对象会包含一个指向暂存内容快照的指针
  4. 该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针
  5. 首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象, 而由多个分支合并产生的提交对象有多个父对象

添加一个目录gitobject里面存三个对象README test.rb LICENSE,把这个目录和三个文件提交到仓库
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

查看Git中的对象

在这里插入图片描述

分析对象的类型和内容

在这里插入图片描述

在这里插入图片描述

可以看出生成了三个blob 对象,两个tree 对象,一个commit
在这里插入图片描述

添加两次commit
第一次commit:
在这里插入图片描述

第二次commit:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

也可以通过git log --online --decorate 查看提交信息
在这里插入图片描述

在这里插入图片描述

分支

分支其实就是一个指针,当前master分支是指向fa527b 就是Snapshot C, 如果从当前创建一个分支testing 的话,testing 和master 一样同时指向fa527b即Snapshot C
Head指针指向当前分支的最新提交,master指针指向主分支的最新提交,分支指针指向某个分支的最新提交。创建分支时,会在当前分支的最新提交上创建一个新的指针,指向新分支的最新提交;提交时,会更新当前分支的指针,指向新提交。
在这里插入图片描述

分支创建

在这里插入图片描述

分支切换

目前当前分支的情况
在这里插入图片描述

commit

在testing 分支commit
在这里插入图片描述

分支分叉

切换到test 分支commit
在这里插入图片描述

分支合并

现在假如到testing分支修改内容合并到test分支
在这里插入图片描述

分支冲突

遇到冲突输入git status 查看冲突的信息,包含合并冲突而有待解决的文件,都会以未合并状态标识出来


//添加 VSCode 为 git difftool 可使用的工具
git config --global difftool.vscode.cmd "code --wait --diff $LOCAL $REMOTE"
git config --global diff.tool vscode

//添加 VSCode 为 git mergetool 可使用的工具
git config --global mergetool.vscode.cmd "code --wait $MERGED"
git config --global merge.tool vscode

//看配置列表,检查是否配置成功
git config --global -l

配置好工具之后
在这里插入图片描述

使用图形化工具来解决冲突,运行 git mergetool
会弹出vscode的界面
在这里插入图片描述

点击合并的按钮选择合并后提交
在这里插入图片描述

撤销commit


git reset --soft HEAD^
git reset --hard HEAD^ 这个会撤销add

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值