Git学习笔记

2023-10-26

配置user信息
  1. 配置user.name

    • git config --global user.name 'your_name'
  2. 配置user.email

    • git config --global user.email 'your_email'
  3. 查看所有配置信息,缺省等同于local

    • git config --local -l 只对某个仓库有效
    • git config --global -l 对当前用户所有仓库有效
    • git config --system -l对系统所有登录的用户有效
    • git config 属性名 查看某一项配置 如:git config user.name
创建Git仓库
  1. 把已有的项目代码纳入Git管理
    • cd项目代码所在的文件夹
    • git init
  2. 新建的项目直接用Git管理
    • cd某个文件夹
    • git init your_project 会在当前路径下创建和项目名称同名的文件夹
    • cd your_project
提交文件

在这里插入图片描述

  • git status 查看当前状态,可以看到有哪些文件需要修改

  • git add file_name 将工作目录下的某个文件添加到暂存区中

  • git add --all git add . 将工作目录下的所有文件添加到暂存区中

  • git commit -m'statement' 将暂存区的文件提交到版本历史中,statement为备注,-m及之后的内容可要可不要。

  • git commit -am'statement'可以不经过暂存区,直接将工作目录中的文件提交到版本历史中(不推荐)。

  • git commit --amend对最近一次commitmessage(上面的statement)做变更

修改工作目录的文件名

直接手动修改工作目录下的文件名时,在git里会出现先deleteadd的记录,通过以下命令快速修改并且不需要手动再add

  • git mv old_file_name new_file_name
HEAD和branch
  • HEAD:头指针,一般指针当前分支(分离头指针状态下不指向任何分支)。

  • git branch -v 查看本地所有的分支, -v可以省略不写(查看分支时*指向当前所在的分支)

  • git branch -a查看所有本地和远程分支

  • git branch -r查看所有的远程分支

  • git branch -vv查看本地分支与远程分支的联系

  • git branch branch_name 创建一个新分支,但是不会自动切换到该分支上

  • git checkout branch_name 切换到某个分支上

  • git checkout -b branch_name 在当前分支基础上创建一个新分支,并切换到该分支上

  • git checkout -b branch_name1 branch_name2 在branch_name2的基础创建一个新分支并切换到该分支上

  • git branch -m old_branch_name new_branch_name修改分支名

  • git push origin --delete origin_branch_name删除一个远程分支

  • git merge branch_namebranch_name分支合并到当前分支

  • git branch -d branch_name删除某个分支,如果该分支的提交未被保存到其他分支上,会提示错误信息

在这里插入图片描述

如果确实不想要该分支上的内容的话,可以使用git branch -D branch_name强制删除该分支。

通过git log查看版本演变历史
  • git log 查看所有的提交记录,q键退出查看log
  • git log 之后添加下面参数(每次可添加多个,顺序任意)
  • -n1 (n可以省略)查看最近提交的一次记录,改变数字可以查看不同数量的提交记录。
  • --onelie 每次提交的记录只显示一行
  • --graph 用图形的形式显示提交记录,最好和--oneline 参数一起使用
  • --all 查看所有分支的提交历史
查看hash值对应的object类型和内容
  • find .git/objects -type p 查看该项目版本历史中创建的所有对象

  • git cat-file -t hash_value 查看对应hash值的对象类型,如committree(文件夹,文件夹下面可以有文件夹和文件)、blob(文件)

  • git cat-file -p hash_value 查看对应hash值的内容,如果当前hash值为commit类型,则显示该commit的相关信息

在这里插入图片描述

  • 如果hash值为tree类型则可以查看该tree下面所有的treeblob(如果文件的内容相同,不管文件名是否相同,hash值均相同,为了节省空间)

在这里插入图片描述

  • 如果hash值为blob类型,使用该命令可以查看文件的内容(有些二进制格式存储的文件不能查看,如图片)

在这里插入图片描述

分离头指针

使用git checkout commit_hash切换到某一次commit历史的时候,这个时候不属于任何分支(HEAD指针没有指向任何分支),所以叫分离头指针状态(detached HEAD state)

在这里插入图片描述

在此状态下,可以像正常情况下在该commit的基础上做各种修改,如果不想保存的话,直接切换到任意分支即可,git在之后很可能会将此状态下的东西当做垃圾清理掉。所以想保存修改的话,可以将此次修改绑定到一个新的分支上即可,一般没有绑定而直接切换到其他分支的时候,git也会提醒我们。

在这里插入图片描述

让暂存区恢复成HEAD
  • git reset HEAD 恢复所有的文件
  • git reset HEAD file_name 恢复某个文件
让工作区的文件恢复为回暂存区的状态

git checkout -- file_name

恢复到之前的某次提交时的状态

git reset --hard commit_hash 这样会丢失此次提交之后的commit,谨慎使用
git reset --soft commit_hash 不会丢失此次提交之后的commit

比较不同分支或不同提交的差异

git diff HEAD HEAD~n 比较此次提交和第前n次提交的差别
git diff branch_name1 branch_name2 比较分支1和分支2的差异

git diff commit_hash1 commit hash2比较提交1和提交2 的差异

如果想知道具体某个文件的差异 ,可以加上 -- file_name

删除文件

git rm file_name 删除文件并将此次操作提交到暂存区

保存当前修改,做其他操作,然后再继续此次操作

git stash

git stash list 查看栈中保存了哪些状态

git stash apply 回到栈顶的状态

git stash pop 回到栈顶的状态并将栈顶出栈

配置公私钥

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 输入后一路回车。然后在C:\Users\user\.ssh下可以看见:
在这里插入图片描述
然后将公钥的内容复制粘贴到Github或你需要连接的服务器上

在这里插入图片描述

将本地与远端建立起连接

git remote add origin ssh_url建立连接,并将远程库取名为origin

git push origin --all 将本地所有分支都push到远程库,可以会出现冲突

git push origin branch_name 将本地当前分支推送到远程库某个分支,可以会出现冲突

将本地分支push到远端时,本地分支和远程出现冲突

git fetch ssh_url branch_name 先将远端分支拉到本地,ssh_url可以替换为https_url

git merge --allow-unrelated-histories origin/branch_name 将本地分支与拉下来的远程分支进行merge,因为此时这两个分支没有任何关联,所以需要加上--allow-unrelated-histories

git push origin branch_name最后再将此分支推送到远程库

不同人修改了同一分支的不同文件(或同一文件的不同区域),推送失败如何处理

git push后发现被拒绝

    • git fetch <远程主机名> 将远程主机上所有分支的更新拉取到本地
    • git fetch <远程主机名> <分支名>将远程主机上的某个分支拉取到本地
    • fetch完会返回一个FETCH_HEAD指针 ,指的是某个branch在服务器上的最新状态
    • 拉取完成后,通过git merge FETCH_HEAD将拉取的分支合并到当前分支
    • git pull 相当于将1中多个步骤合并为一个步骤,1中的fetch步骤可以先拉取到本地,然后用户可以再检查了以后决定是否合并(merge)到工作本机分支中
不同人修改了同一分支的同一区域,推送时如何处理
  • git push后发现被拒绝

  • git pull拉取最新代码发现出现冲突

打开出现冲突的文件,选择需要保存的内容,删掉git帮我们区分的信息(<<<<HEAD ,======, >>>>64xx)

在这里插入图片描述

然后将此文件add之后再commit,从而解决了冲突问题。

其他人修改了同一分支某个文件的文件名和文件内容,而我们也修改了此文件的内容,推送时如何处理

开出现冲突的文件,选择需要保存的内容,删掉git帮我们区分的信息(<<<<HEAD ,======, >>>>64xx)

在这里插入图片描述
然后将此文件add之后再commit,从而解决了冲突问题。

其他人修改了同一分支某个文件的文件名和文件内容,而我们也修改了此文件的内容,推送时如何处理

直接git pullgit会非常智能的帮我们合并

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git学习笔记 的相关文章

随机推荐

  • 大数据处理中的关键算子:分割(Split)和选择(Select)

    在大数据处理中 分割 Split 和选择 Select 是两个常用的算子 它们在数据转换和处理过程中发挥着重要的作用 本文将详细介绍这两个算子的功能和使用方法 并附上相应的源代码示例 1 分割 Split 分割算子用于将一个数据集拆分成多个
  • 图的深度遍历和广度遍历

    理论部分 图的深度遍历和广度遍历都不算很难像极了二叉树的前序遍历和层序遍历 如下面的图 可以用右边的邻接矩阵进行表示 假设以顶点0开始对整幅图进行遍历的话 两种遍历方式的思想如下 1 深度优先遍历 depthFirstSearch DFS
  • LISN到底是啥?干啥用的?

    LISN到底是啥 干啥用的 LISN是在EMC测试的时候 会被使用的设备 如下图所示 双路V型电源阻抗稳定网络 它完全符合CISPR16 1 2 MIL STD 461F VDE 0876 FCC Part 15标准的要求 其等效电路为50
  • 20191004

    A 解 1 我们发现只需要关心处于结果字符串前 k 位的字符 因此考虑从后往前处理 对于一个询问区间 我们暴力连边 用并查集维护 x 的父亲等于 y 相当于位于 x 的字符是从位于 y 的字符处复制过来的 然后删掉这个区间 更新其他元素的排
  • Hutool BeanUtils.copyProperties的四种用法 空不拷贝/忽略拷贝/空不和忽略拷贝/全拷贝

    关注公众号 奇叔码技术 回复 java面试题大全 或者 java面试题 即可领取资料 一 Hutool BeanUtils copyProperties的四种用法 空不拷贝 忽略拷贝 空不和忽略拷贝 全拷贝 1 第一种用法 BeanUtil
  • STM32-CubeMX学习笔记

    例程参考链接 http bbs elecfans com jishu 714935 1 1 html 1 首次使用参见文档 http blog csdn net tq384998430 article details 53466263 2
  • 彻底搞懂Java中的synchronized关键字

    synchronized的作用 synchronized 的作用主要有三 原子性 所谓原子性就是指一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断 要么就都不执行 被synchronized修饰的类或对象的所有操作都是原子
  • 【歪门邪道】懒得麻烦UI同学切图所以用AndroidStudio生成icon

    每次新建项目 是不是都默认生成一个 ic launcher 对于这个icon 你是不是从来都是一删了事 你有没有一次 打开并留意过里头 ic launcher foreground 和 ic launcher background 文件 如
  • 关于以太坊的nonce值

    文章目录 每笔交易nonce值的各个情况 总结 关于Nonce的保管 依赖节点 自行管理nonce 参考代码 nonce在区块链中是一个非常重要的概念 从比特币到以太坊都有nonce的身影 在比特币中 nonce主要用于调整pow挖矿的难度
  • Go语言学习——4、数据存储:数组,切片,映射

    目录 一 数组 1 声明数组 2 初始化数组 3 遍历数组 二 切片 1 从数组或切片生成新的切片的语法格式 2 直接生成一个新的切片 3 切片添加元素 4 从切片删除元素 5 遍历切片 三 映射 1 声明映射 2 初始化映射 3 遍历映射
  • Linux--僵死进程(僵尸进程)

    1 僵死进程产生的原因或者条件 当子进程先于父进程结束 父进程没有获取子进程的退出码 此时子进程变成僵死进程 即就是子进程结束了 但父进程还没有结束的时候才会出现僵死进程 代码中 子先于父 后台运行 当一个进程结束的时候 只有进程的退出码被
  • 前端 token 应该放在哪里呢?

    总结 反正是服务端加密的传过来让前端存着的 通常的存储都可以放 只不过需要防范攻击就是了 风险 放在 webStorage 里的话 因为同源策略 可以在当前页面中注入脚本进行 xss 攻击来获取信息 比如在一个帖子下面回复了一串 js 脚本
  • 点云数据下的KD-tree

    点云数据下的KD tree检索 数据结构 构建KD tree 最近邻检索 KD tree简称K维树 是一种空间划分的数据结构 常被用于高维空间中的搜索 比如范围搜索和最近邻搜索 kd tree是二进制空间划分树的一种特殊情况 在激光雷达SL
  • go mod vender package io/fs is not in GOROOT (/usr/local/go/src/io/fs)

    一 问题解决 最近写区块链相关项目时候 对于智能合约部署时对其进行vender时报错 io fs is not in GOROOT usr local go src io fs 搜索了一下是因为go版本问题 我原本是1 15 5的版本 后来
  • 实施MES系统有何难点,以及怎么解决?

    实施MES系统有何难点 以及怎么解决 很多制造企业当前对于MES系统还处于认知阶段 制造业管理者们在不断了解MES系统的过程中 发现实施MES并没有想象中的简单 一个成熟的MES系统要经历哪些难点 如何更好的解决 一 MES系统有哪些实施难
  • Docker之DockerFile相关基础知识

    DockerFile相关基础知识 一 Docker镜像原理 1 操作系统组成部分 1 1 七大子系统 1 2 Linux文件系统 2 Docker镜像原理介绍 2 1 原理图 2 2 Docker镜像本质 2 3 统一文件系统 2 4 复用
  • react配置项目路径别名@

    为什么有的项目引入路径写 可以 自己的不行呢 因为别人的项目是配置过路径别名的 就表示src目录 因此我们也需要配置一遍 以下是react项目示范 vue项目同理 ts对 指向src目录的提示是不支持的 vite默认也不支持 所以需要手动配
  • 如何计算TCP吞吐量

    为什么80 的码农都做不了架构师 gt gt gt FROM how to calculate tcp throughput for long distance links 如何计算广域网链路的 TCP 吞吐量 刚刚点亮数据中心之间的高速网
  • Linux IP出现inet6 addr :fe80::20c:29ff:fe47:fd61/64 scope:l

    经常出现 inet6 addr fe80 20c 29ff fe47 fd61 64 scope link1 这种情况的不要担心了 试试这个方法 这也是我折磨了好多天整理的 不喜勿喷 谢谢 虚拟机设置权限 sudo chown book b
  • Git学习笔记

    配置user信息 配置user name git config global user name your name 配置user email git config global user email your email 查看所有配置信息