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吧,太难了

相关推荐
爱看大明王朝156637 分钟前
磁件学习-磁性元器件的极限计算
笔记·学习
东风破1371 小时前
DM8达梦共享存储集群DSC搭建步骤
数据库·学习·dm达梦数据库
星幻元宇VR2 小时前
VR科普大空间:沉浸式公共教育新模式
科技·学习·安全·vr·虚拟现实
一只积极向上的小咸鱼3 小时前
嵌套 Git 仓库 / gitlink / submodule 问题总结
大数据·git·elasticsearch
LuDvei4 小时前
git拉取报错问题
git
笨鸟先飞的橘猫4 小时前
MMO游戏中的“跨服团队副本”匹配与状态同步系统
分布式·学习·游戏·lua·skynet
程序猿多布4 小时前
Fork操作笔记
git·fork
荪荪4 小时前
在本地建立git仓库
git
雨落在了我的手上5 小时前
如何学习java?
java·开发语言·学习
OYangxf5 小时前
Git Rollback, Reset and Restore的使用
git