Git
Git
安装
官网下载:https://git-scm.com/
下载安装包后运行,使用默认选项一路 Next 即可
检查是否安装成功
1
git --version配置身份信息(用于标识提交记录里的作者)
1
2git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"查看当前配置
1
git config --global --list
基本概念
仓库
- 本地仓库:存放在你电脑上的仓库
- 远程仓库:存放在服务器(如 GitHub)上的仓库
三大区域
工作区 –add–> 暂存区 –commit–> 本地仓库
- 工作区:电脑上的项目文件夹,写代码的地方
- 暂存区:临时存放修改的地方,决定哪些修改要放进下一个版本
- 本地仓库:保存所有版本历史的
.git目录
基本命令
仓库相关
初始化仓库
1
git init克隆远程仓库
1
2
3
4git clone https://github.com/用户名/仓库名.git
# 克隆到指定目录
git clone https://github.com/用户名/仓库名.git 本地文件夹名查看状态
文件相关
查看文件状态
显示哪些文件被修改了但还没暂存;哪些文件已经暂存,等待提交;哪些文件没有被 Git 跟踪
1
git status添加文件到暂存区
1
2
3
4
5# 添加指定文件
git add 文件名
# 添加当前目录下所有修改
git add .把暂存区文件提交到仓库
1
2
3
4
5# 提交并附带简短的说明信息
git commit -m "描述这次做了什么修改"
# 提交所有已跟踪文件的修改,-a相当于git add
git commit -a -m "直接提交"查看提交历史
1
2
3
4
5
6
7
8# 查看完整历史
git log
# 简洁的一行显示
git log --oneline
# 图形化显示分支历史
git log --graph --oneline --all查看文件差异
1
2
3
4
5
6
7
8# 查看工作区和暂存区的差异(还没 git add 的修改)
git diff
# 查看暂存区和最新提交的差异(已经 git add 但还没 commit 的修改)
git diff --staged
# 查看两个提交之间的差异
git diff 提交ID1 提交ID2
版本管理
回退版本
1
2
3
4
5
6
7
8
9
10
11# 回退到上一个提交,撤销 commit 和 add,保留文件修改
git reset HEAD~1
# 回退到上一个提交,撤销 commit,保留修改用于重新提交
git reset --soft HEAD~1
# 回退到上一个提交,彻底回到指定版本,丢弃所有修改
git reset --hard HEAD~1
# 回退到指定提交
git reset --hard 提交ID安全撤销
1
2
3# 会创建一个新的版本,内容是指定的版本内容
# 和reset的区别是不会删除历史
git revert 提交ID回退单个文件
1
2
3
4
5# 撤销这个文件的add
git restore --staged 文件名
# 从指定的提交中恢复文件
git restore --source=提交ID 文件名编辑最后一次提交
1
2
3
4
5
6# 修改最后一次提交的说明信息
git commit --amend -m "新的提交信息"
# 把忘掉的修改追加到上一次提交中(不产生新提交)
git add 忘掉的文件
git commit --amend --no-edit
分支管理
查看分支
1
2
3
4
5
6
7
8# 查看本地所有分支(前面带 * 的是当前分支)
git branch
# 查看远程分支
git branch -r
# 查看所有分支(本地 + 远程)
git branch -a创建分支
1
2
3
4
5
6# 创建分支(但不切换)
git branch 分支名
# 创建并切换到新分支
git switch -c 分支名 # 新版命令(推荐)
git checkout -b 分支名 # 传统命令切换分支
:warning:在切换时,如果有尚未commit的修改,会直接覆盖到新分支的工作区和暂存区
1
2
3# 切换到已有分支
git switch 分支名 # 新版命令(推荐)
git checkout 分支名 # 传统命令合并分支
1
2# 合并到当前分支
git merge 分支名删除分支
1
2
3
4
5# 删除已合并的分支
git branch -d 分支名
# 强制删除(即使没合并)
git branch -D 分支名暂存分支的修改
想要切换到其它分支,但不想要丢到现在分支的工作区和暂存区
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 暂存当前所有修改
git stash
# 带说明信息的暂存
git stash push -m "WIP: 用户登录功能进行中"
# 查看已暂存的列表
git stash list
# 恢复最近一次暂存(并保留 stash 记录)
git stash apply
# 恢复最近一次暂存(并删除 stash 记录)
git stash pop
# 删除所有 stash
git stash clear
远程仓库
关联远程仓库
1
2
3
4
5
6
7
8
9
10
11# 添加远程仓库(origin 是约定俗成的名字)
git remote add origin 仓库地址
# 查看已关联的远程仓库
git remote -v
# 修改远程仓库地址
git remote set-url origin 新地址
# 删除远程仓库关联
git remote remove origin推送代码
1
2
3
4
5
6
7
8# 推送当前分支到远程仓库
git push origin 分支名
# 首次推送并建立追踪关系(之后可以直接用 git push)
git push -u origin 分支名
# 推送所有本地分支
git push --all origin拉取代码
1
2
3
4
5
6
7
8
9
10# git fetch:只下载远程更新,不合并
git fetch origin
# git pull:下载并自动合并到当前分支(= git fetch + git merge)
git pull origin 分支名
# 用 rebase 方式拉取(保持历史整洁)
# 变基:把远程代码的commit拉下来,再把本地的commit接到后面
# 如果不变基就会显示两个分支合并成一个
git pull --rebase origin 分支名
代码冲突的处理
当合并出现冲突时,Git 会输出:
1 | |
解决方式:
手动解决
冲突的文件里会显示
1
2
3
4
5<<<<<<< HEAD
分支1
=======
分支2
>>>>>>> 分支2标记 含义 <<<<<<< HEAD当前分支(main)的内容 =======分隔线 >>>>>>> 分支2被合并分支的内容 保留其中一个
1
分支2然后
add,commit1
2git add .
git commit -m "解决合并冲突"
取消合并
1
git merge --abort
.gitignore
有些文件不应该被 Git 跟踪(如依赖包、编译产物、密钥、系统文件等),通过
.gitignore来忽略它们
可能出现的问题
推送远程仓库时出现
git SSL certificate problem: unable to get local issuer certificate时,设置1
2// 使用 Windows 系统自带的证书系统(Schannel)来处理 SSL/TLS 连接
git config --global http.sslbackend schannel推送时
Automatic merge failed; fix conflicts and then commit the result.,表示自动合并失败,本地和远程文件同一部分被修改1
2
3
4
5
6
7
8
9
10
11
12// 查看冲突文件
git status
// 打开冲突文件可以看到
<<<<<<< HEAD
本地内容
=======
远程内容
>>>>>>> origin/main
// 保留本地内容或远程内容
// 修改完文件后 git add、commit、push即可
git工作流
通常
先将远程仓库的项目拉到本地
1
git clone <仓库地址>在本地新建一个自己的分支
建议在自己的branch上修改代码,而不是直接在主分支上修改
1
2git checkout -b <分支名>
// -b 新建并且切换到新分支在自己分支上修改代码
在写完代码,还没有保存到git本地仓库时,可以通过
git diff查看修改后的代码和修改前的代码的不同建议先看一下修改了哪些内容再继续
将修改的代码保存到暂存区
1
2git status // 查看还没有保存到暂存区的文件
git add <文件名/*> // 将文件添加到暂存区,*表示所有将暂存区的代码提交到git本地仓库中
1
git commit -m "<备注信息>"将自己本地的分支提交到远程仓库,远程仓库会多出一个新分支
1
git push origin <提交的远程仓库的分支名>
当远程仓库的主分支代码有改动时
如果在合并自己的分支和远程仓库主分支时,远程仓库主分支的代码在之前clone下来的基础上有改动,需要同步远程仓库的代码到本地的分支里,看看会不会冲突
先将本地git的分支切换回主分支,再将远程仓库的代码拉到本地
1
2git checkout main
git pull origin main切换到分支上,将分支上的代码和最新的代码尝试进行合并
可能会出现冲突,需要手动选择要保存的代码
1
git rebase main // 意思是在最新的main的基础上,将我的修改添加到main中解决完冲突后,将本地的分支推到远程仓库的分支上
1
2git push -f origin <分支名>
// -f force强行
远程仓库上将分支和主分支合并
远程仓库主人通过pull request的squash and merge 将所有的commit合并成一个commit ,再合并到主分支上

合并完,通常会删除本地分支和远程分支,再把最新的主分支拉到本地主分支
1
2git branch -D <分支名> // 删除本地分支
git pull origin main // 把最新的主分支拉到本地主分支1
删除远程分支:点击view all branchs,点击垃圾桶标识就可删除了