当前位置: 首页 > article >正文

Git的学习和常见问题

文章目录

  • 1.初始化配置
  • 2.新建仓库
  • 3.添加和提交文件
  • 4.git reset 回退版本
  • 5.git diff 查看差异
  • 6.git rm 删除文件
  • 7.文件 .gitigonre
  • 8.克隆远程仓库
  • 9.将已有的本地仓库关联到远程仓库
  • 10.分支的基本操作
  • 11.解决合并冲突
  • 配置问题


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

前置操作

  1. 安装Git
    进入官网
  2. 在终端中输入git -v查看版本信息
    在这里插入图片描述

1.初始化配置

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

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.新建仓库

# 在桌面创建文件夹
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.添加和提交文件

# 查看仓库状态
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 回退版本

# 将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时

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

输出

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

里面的文件名会被忽略,不提交到仓库中,目的是
使仓库体积更小、更干净

# 表示忽略所有的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公钥
# 回到根目录
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.将已有的本地仓库关联到远程仓库

在这里插入图片描述

# 添加一个名为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:不会破坏原分支提交记录

# 查看分支
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:不会新增额外的提交记录

git switch main
git rebase dev

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

11.解决合并冲突

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

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

# 如果想要终止合并,不让git写入
git merge --abort

配置问题

  1. Git报错

    摘自Git报错

    • Failed to connect to github.com port 443
      解决办法:配置http代理
      配置socks5代理
      git config --global http.proxy socks5 127.0.0.1:7890
      git config --global https.proxy socks5 127.0.0.1:7890
      
      配置http代理
      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密钥
      ssh-keygen -t rsa -C "xiechimon@qq.com"
      # 双引号里输入自己的邮箱地址
      

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


http://www.kler.cn/a/500401.html

相关文章:

  • uni-app (接入智谱清言语言模型)
  • 带格式 pdf 翻译
  • 【每日学点鸿蒙知识】包体积优化、WebView下载PDF等
  • Jaeger UI使用、采集应用API排除特定路径
  • [人工智能自学] Python包学习-Matplotlib
  • 如何快速适应新入职的公司
  • 【Ubuntu与Linux操作系统:四、文件与目录管理】
  • [Git] git log / git reflog
  • 【云计算】OpenStack云计算平台
  • 【习题】<HarmonyOS第一课>应用程序框架基础
  • 2025_1_12_Makefile_进度条
  • uniapp运行到IOS真机提示 错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配
  • 《PC 上的开源神经网络多模态模型:开启智能交互新时代》
  • 网络安全设备主要有什么
  • CentOS7下Spark-2.4.3-bin-without-hadoop版本安装详细图文教程
  • 宝塔安装mongodb后,写脚本监控运行状态,关闭后自动重启
  • QT Must be called on Chrome_UIThread; actually called on Unknown Thread.
  • C# OpenCV机器视觉:主色提取
  • 命令模式-Command Pattern
  • Linux 攻击Exploit编写
  • 针对数据库系统安全的漏洞扫描加固工具【WebSocket + MySQL】
  • awr报告无法生成:常见分析手段