文章目录
- 1.初始化配置
- 2.新建仓库
- 3.添加和提交文件
- 4.git reset 回退版本
- 5.git diff 查看差异
- 6.git rm 删除文件
- 7.文件 .gitigonre
- 8.克隆远程仓库
- 9.将已有的本地仓库关联到远程仓库
- 10.分支的基本操作
- 11.解决合并冲突
- 配置问题
最近基于GeekHour的视频学习Git,记录了一些常用命令和踩过的坑。
前置操作
- 安装Git
进入官网- 在终端中输入
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公钥的配置
- 配置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
配置问题
-
Git报错
摘自Git报错
- Failed to connect to github.com port 443
解决办法:配置http代理
配置socks5代理
配置http代理git config --global http.proxy socks5 127.0.0.1:7890 git config --global https.proxy socks5 127.0.0.1:7890
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
- Failed to connect to github.com port 443
-
克隆仓库时SSH密钥为中文名导致克隆失败
解决:解决git生成ssh密钥失败问题,本机用户名中文乱码导致密钥生成失败。- 打开gitbash
- 重新创建SSH密钥
ssh-keygen -t rsa -C "xiechimon@qq.com" # 双引号里输入自己的邮箱地址
补充:不知道为什么成功一次之后又失败了,还是用回HTTPS吧,太难了
- 打开gitbash