Git的学习和常见问题

文章目录


最近基于GeekHour的视频学习Git,记录了一些常用命令和踩过的坑。
前置操作

  1. 安装Git
    进入官网
  2. 在终端中输入git -v查看版本信息

1.初始化配置

配置用户名和邮箱(用的PowerShell)

shell 复制代码
git config --global user.name Xiechimon
git config --global user.email xiechimon@qq.com

# 保存用户名和密码
git config --global credential.helper store
# 查看Git的配置信息
git config --global --list

2.新建仓库

shell 复制代码
# 在桌面创建文件夹
cd D:\Desktop
mkdir learn-git

# 在文件夹下创建.git,此时该目录为仓库
cd learn-git
git init

# 查看当前目录是否有.git文件
ls -force

# 删除仓库
Remove-Item -Force .git

# 创建 my-repo 仓库
git init my-repo

# 克隆仓库
git clone [address]

# 查看仓库中的文件
git ls-files

3.添加和提交文件

shell 复制代码
# 查看仓库状态
git status

# 创建文件并写入内容
echo "这是第一个文件" > file1.txt
# 查看文件内容
cat file1.txt

# 将文件添加到暂存区
git add file1.txt
# 将所有以txt为后缀的文件添加到暂存区
git add *.txt
# 添加所有文件
git add .

# 提交到仓库
git commit -m "submit test"

# 查看提交记录
git log
git log --oneline  # simple

4.git reset 回退版本

shell 复制代码
# 将Test仓库复制一份
Copy-Item -Path "Test" -Destination "test-copy" -Recurse -Force

# soft:只是把commit的文件回退到暂存区了
git reset --soft [versions]  # 表示回退到指定的版本
# 再commit一次就可以回到原版本

# hard:把以前版本的内容都清空了,无法回去
git reset --hard HEAD^  # 表示回退到上一个版本

# mixed(default):将已经commit和add的文件退回,再次add和commit就能回到原版本
git reset HEAD^

# 如果误操作了hard也可以回溯
git reflog  # 查看操作记录
git reset --hard 2b45b42  # git reset回退到这个版本即可

5.git diff 查看差异

  • git diff:在工作区add\commit之后修改文件内容就能看到差异,看工作区与缓存区和本地仓库之间的差异

当更改了file3.txt时

shell 复制代码
notepad file3.txt
# 修改文件之后,会从本地仓库直接退回到工作区,不在暂存区

输出

shell 复制代码
diff --git a/file3.txt b/file3.txt		# 提示发生变更的文件
index 55bd0ac..6f96da6 100644			# 省略的哈希值和文件权限
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-333			# 删除的
+332			# 添加的
  • git diff HEAD:在工作区修改之后add,能看到在工作区修改的内容,看工作区与暂存区之间的差异
  • git diff --cached:比较暂存区与本地仓库之间的差异,在commit之后就无输出了
  • git diff [ID] [ID]:比较两个特定版本之间的差异
    git diff HEAD~ HEAD 表示当前版本与上一个版本之间的差异
    还可以指定文件

6.git rm 删除文件

如果文件在外部被删除,而暂存区中还存在,可以再add和commit一次从而更新暂存区和版本库

7.文件 .gitigonre

里面的文件名会被忽略,不提交到仓库中,目的是

使仓库体积更小、更干净

shell 复制代码
# 表示忽略所有的log文件
*.log

# 表示忽略任何目录下的temp文件夹
temp/

# 只忽略当前目录下的TODO文件夹
/TODO

# 保留文件
!lib.a

# 忽略doc/ 下的txt文件
doc/*.txt

# 忽略doc/ 及其所有子目录下的pdf文件
doc/**/*.pdf

github上的配置模板

8.克隆远程仓库

SSH(Secure Shell)是一种网络协议,用于在不安全的网络上安全地访问和管理远程计算机。

相较于HTTPS方式,SSH方式在推送的时候不需要验证用户名密码,更加安全方便,但需要在GitHub上添加SSH公钥的配置

  1. 配置SSH公钥
shell 复制代码
# 回到根目录
cd
# 进入.ssh目录
cd .ssh
# 生成SSH密钥、指定协议为RSA、生成大小为4096
ssh-keygen -t rsa -b 4096

# 1.之后如果之前没有配置过就直接回车
# 如果配置过了就输入一个新的文件名,否则会覆盖原来的
# 2.输入密码
# 3.会生成两个文件:id_rsa(私钥)、id_rsa.pub(公钥)
# 4.cat打开公钥文件id_rsa.pub,复制内容并上传到GitHub
  • 将公钥文件上传到github
  • 如果刚配置了一个新的密钥,需要创建一个config文件,并添加内容,目的是当访问GitHub时使用新的密钥

9.将已有的本地仓库关联到远程仓库

shell 复制代码
# 添加一个名为origin的远程仓库
git remote add origin https://github.com/sleP4o/first-repo.git

# 查看本地仓库所对应的远程仓库的别名和地址
git remote -v

# 指定分支的名称为main (可省略)
git branch -M main

# 把本地的main分支和远程仓库origin的main分支关联
git push -u origin main

# 拉取远程仓库到本地仓库并自动合并
git pull [origin] [main]

10.分支的基本操作

分支用于新功能的开发和测试或者团队协作,不会影响到主线代码

Merge:不会破坏原分支提交记录

shell 复制代码
# 查看分支
git branch

# 创建分支dev
git branch dev

# 切换到dev分支
git switch dev
git checkout dev  # checkout可以用于切换分支和恢复文件,有歧义

# 将dev分支合并到当前分支
git merge dev

# 以图表形式查看日志
git log --graph --oneline --decorate --all
# 可以给它起个别名,以后只要用graph就能查看
notepad $PROFILE # 1.打开pwsh配置文件
. $PROFILE  # 2.保存配置

# 删除已经被合并的分支,未合并的要强制删
git branch -d dev
# git branch -D branch-name  # 强制删除

Rebase:不会新增额外的提交记录

shell 复制代码
git switch main
git rebase dev

建议:Rebase用于自己一人在分支上开发,Merge用于协同开发

11.解决合并冲突

当两个分支修改同一个文件的同一行代码时,Git不知道保留哪一个,从而产生冲突

当产生冲突时,git会把两个分支写的内容都写到该文件中,然后通过用户手动修改该文件从而解决冲突

shell 复制代码
# 如果想要终止合并,不让git写入
git merge --abort

配置问题

  1. Git报错

    摘自Git报错

    • Failed to connect to github.com port 443
      解决办法:配置http代理
      配置socks5代理

      shell 复制代码
      git config --global http.proxy socks5 127.0.0.1:7890
      git config --global https.proxy socks5 127.0.0.1:7890

      配置http代理

      shell 复制代码
      git config --global http.proxy 127.0.0.1:7890
      git config --global https.proxy 127.0.0.1:7890
    • Failed to connect to 127.0.0.1 port 7890
      把这里的端口设置成7890

  2. 克隆仓库时SSH密钥为中文名导致克隆失败

    解决:解决git生成ssh密钥失败问题,本机用户名中文乱码导致密钥生成失败。

    • 打开gitbash

    • 重新创建SSH密钥

      bash 复制代码
      ssh-keygen -t rsa -C "xiechimon@qq.com"
      # 双引号里输入自己的邮箱地址

    补充:不知道为什么成功一次之后又失败了,还是用回HTTPS吧,太难了

相关推荐
Heavydrink13 分钟前
Spring学习笔记2
笔记·学习·spring
霜雪殇璃26 分钟前
c++对结构体的扩充以及类的介绍
开发语言·c++·笔记·学习
冉佳驹30 分钟前
C++ ——— 匿名对象
c++·学习·类和对象·匿名对象
王子良.1 小时前
大数据生态系统:Hadoop(HDFS)、Hive、Spark、Flink、Kafka、Redis、ECharts、Zookeeper之间的关系详解
大数据·hive·hadoop·经验分享·学习·hdfs·spark
Fz@1 小时前
AD与嘉立创的集成库整理
笔记·学习
winxp-pic1 小时前
从 2D 图像中学习 3D 人机交互关系
学习·3d·人机交互
小高Baby@1 小时前
网络授时笔记
开发语言·笔记·学习·php
weixin_437398211 小时前
Elasticsearch学习(1) : 简介、索引库操作、文档操作、RestAPI、RestClient操作
java·大数据·spring boot·后端·学习·elasticsearch·全文检索
誓约酱1 小时前
git的基本使用
linux·运维·服务器·c++·git·后端
安的列斯凯奇2 小时前
Elasticsearch—索引库操作(增删查改)
大数据·elasticsearch·搜索引擎