Git使用教程
Git 是分布式版本控制系统,也可以叫内容管理系统(CMS),工作管理系统。
Git安装
本文档后半部分会介绍SourceTree,SourceTree内置有Git所以这里不介绍其他Git安装方式。
Git工作流程
- 克隆 Git 资源到本地仓库(文件夹)
- 在本地仓库中添加或修改文件。
- 获取Git其他人的修改信息。
- 如果有修改,拉取别人的修改内容。
- 提交自己的修改。
- 如果提交的修改有错误,回退修改并再次修改后提交修改。
![](D:\Main File\桌面\Git使用教程\图片\Git工作流程.png)
Git 工作区、暂存区和版本库
-
工作区(Working Directory): 这是你当前正在操作的项目目录,包含了项目的所有文件。在工作区进行的修改,包括新增、编辑和删除文件,都会被Git跟踪到。
-
暂存区(Index或Stage): 这是一个临时区域,用于存放你已经完成的修改。在工作区进行的修改,如果你想将其纳入下一次提交,就需要将这些修改先添加到暂存区。通过执行
git add
命令,你可以将指定文件或所有文件的修改添加到暂存区。 -
仓库区(Repository): 也被称为版本库,是Git用来存储项目的最终版本的地方。当你执行
git commit
命令时,暂存区的内容会被提交到仓库区,形成一个新的版本(commit)。仓库区中保存了项目的完整历史记录。 -
远程版本库(remote repository), 与本地仓库概念基本一致,不同之处在于一个存在远程,可用于远程协作,一个却是存在于本地。通过push/pull可实现本地与远程的交互;
-
远程仓库副本, 本地的一个分支,可以理解为存在于本地的远程仓库缓存。如需更新,可通过git fetch/pull命令获取远程仓库内容。
Git常用命令
配置:
git config
: 配置 Git 工具的设置。git config --global user.name "Your Name"
: 配置用户名。git config --global user.email "your.email@example.com"
: 配置用户邮箱。
创建仓库:
git init
: 在当前目录初始化一个新的 Git 仓库。git clone <repository>
: 克隆一个远程仓库到本地。
基本操作:
git add <file>
: 将文件的修改添加到暂存区。git commit -m "Commit message"
: 提交暂存区的修改到仓库区。git status
: 查看工作区和暂存区的状态。git log
: 查看提交历史。
分支操作:
git branch
: 列出本地分支。git branch <branch_name>
: 创建新分支。git checkout <branch_name>
: 切换到指定分支。git merge <branch_name>
: 合并指定分支到当前分支。
远程操作:
git remote
: 列出远程仓库。git remote add <name> <url>
: 添加远程仓库。git pull <remote> <branch>
: 从远程仓库拉取更新。git push <remote> <branch>
: 推送本地分支到远程仓库。
撤销和回滚:
git reset <file>
: 取消对文件的暂存。git revert <commit>
: 撤销某次提交。git checkout -- <file>
: 恢复工作区的文件到最近一次提交状态。
标签:
git tag
: 列出标签。git tag <tag_name>
: 创建标签。git tag -d <tag_name>
: 删除标签。
.gitignore忽略文件
忽略文件是指在版本控制系统中,通过指定忽略规则告诉系统哪些文件或目录不应该被跟踪、不应该被包含在版本控制中的文件。这样做可以排除一些不必要的、临时的、或者是自动生成的文件,以确保版本库保持整洁和高效。
在 Git 中,忽略规则通常通过一个名为 .gitignore
的文件来定义。这个文件列举了哪些文件或目录应该被 Git 忽略。.gitignore
文件可以包含通配符和特定的规则,用于指定哪些文件或目录应该被忽略。
常见通配符和示例
1. /
(正斜杠)
- 示例:
/build/
- 说明: 表示忽略名为
build
的目录及其内容。
2. *
(星号)
- 示例:
*.log
- 说明: 表示忽略所有以
.log
结尾的文件。
3. ?
(问号)
- 示例:
temp?.txt
- 说明: 表示匹配类似
temp1.txt
、tempA.txt
等文件。
4. !
(感叹号)
- 示例:
!important.txt
- 说明: 表示不忽略名为
important.txt
的文件。
5. #
(井号)
- 示例:
# This is a comment
- 说明: 表示注释该行,不进行匹配。
6. []
(方括号)
- 示例:
[Tt]emp.txt
- 说明: 表示匹配
Temp.txt
或temp.txt
。
7. /**
- 示例:
docs/**/*.pdf
- 说明: 表示匹配
docs
目录下的所有子目录中的.pdf
文件。
.gitignore模板(基于C#)
# Visual Studio Code
.vscode/
# Rider
.idea/
# 用户特定文件
*.rsuser
*.suo
*.user
*.userosscache
*.suo
*.sdf
*.opensdf
*.xuser
*.xusers
*.cache
*.log
*.vspscc
*.vsp
*.psess
*.vspcc
*.vspx
*.userosscache
*.suo
*. suo
*.user
*.suo
*.tss
# 用户特定文件(Mono自动生成)
mono_crash.*
# Windows图像文件缓存
Thumbs.db
ehthumbs.db
# 文件夹配置文件
Desktop.ini
# 在文件共享上使用的回收站
$RECYCLE.BIN/
# Visual Studio Code目录
.vscode/
# Windows安装程序文件
*.cab
*.msi
*.msm
*.msp
# Windows快捷方式
*.lnk
# NuGet包
*.nupkg
# 包目录
/packages/
# .NET脚手架
ScaffoldingReadMe.txt
SourceTree使用教程
SourceTree安装
从此网址https://www.sourcetreeapp.com下载安装包
下载完成后,解压 ZIP 文件,双击应用程序文件(Windows 为 EXE 或 Mac 为 DMG)进行安装。
创建 Bitbucket 账户可跳过初始设置,加载 SSH 密钥,如果有会默认加载进来,也可以后面再设置。
设置用户名和邮箱地址
在弹出的SSH对话框中直接选择No
SourceTree克隆仓库
从git上创建的项目复制http链接
打开安装好的SourceTree将复制的Http链接贴贴后进行克隆。
SourceTree安装好后第一次克隆需要输入Git服务器账号密码。
然后点击克隆按钮进行克隆。
创建成功后即可在克隆界面上输入的存储地址目录看到创建好的工作区目录,然后就可以在工作区目录创建、添加、修改文件了。
SourceTree的基本操作
获取
从远程服务器上获取其他人的更新信息,获取后如果远程服务器有更新则在拉取按钮上可以看到更新的信息数量
拉取
从远程服务器上拉取其他人的更新到本地工作区
暂存、提交和推送
将选择修改文件暂存到暂存区->检查对比修改->编辑修改内容->根据情况勾选推送到远程->提交,如果在上一步骤中没有勾选推送到远程,则在提交后在左上角Push(推送)按钮出会出现推送数量,点击推送即可推送到远程。
创建分支
选择创建分支的父分支->单击Branch(分支)->编辑分支名称->创建分支
检出
鼠标左键双击或者右键单击->CheckOut(检出)检出分支
合并
检出工作分支->鼠标右键单击需要合并的分支->单击Merge NewBranch Into current branch(合并分支NewBranch到当前分支)进行合并
贮藏
将所有工作区中的修改文档(不包含新增文档)贮藏起来,然后再非暂存区和暂存区删除所有修改文档的修改。贮藏起来的内容可以再STASHES(贮藏)栏中查看。
将修改文档应用到工作区中
添加标签
给分支的最新提交的节点添加标签,标签内容可以区分软件发布版本的版本号。
历史信息
Git的所有提交、合并和标签等信息都可以在这里查看
远程
刚拉下的时候在BRANCHES上只会显示main分支,所以所有的其他远程的分支都需要在这里检出
文件筛选
可以通过文件筛选在非暂存区显示不同的文件
命令行
SourceTree常见异常解决方案
解决修改拉取不下提交不了的情况
我们在修改文件后提交到git上显示提交失败(失败原因为我们当前的提交),通过获取发现远程有修改提交,我们通过拉取又拉取失败,这常常是因为远程提交了我们本地修改的文档的修改,在这种情况下我们即拉取不下来修改和提交不了修改。
解决方式:将远程提交的修改和我们提交的修改进行合并,合并后远程和本地都修改的文档会显示冲突,我们解决冲突后提交修改就解决了。
上述情况还有一种可能,即在提交失败后通过拉取可以触发一个合并操作,我们只需要解决冲突后提交修改就可解决这种问题,如果没有触发合并操作就需要按上述解决方式解决。
解决冲突
当出现冲突时表示本地修改的和别人提交的修改存在相同的内容,git不能解决这种情况,所以需要使用者自己解决这种情况。如下图带有警告标识的Code.cs就是冲突文件,在右方的文档修改内容中就有显示本地和别人的修改(<<<<<HEAD 到 之间的内容是本地修改,到>>>>>>origin/main是别人修改的内容),SourceTree提供了简单的解决冲突的方法,如下图,右键单击冲突文件->选择Resovle Conflicts(解决冲突)->然后选择“Lanuch External Merge Tool(启动其他合并工具)”、"Resolve Using "Mine"(使用我的版本)"、“Resolve Using "Theirs"(使用远程版本)”等方式解决冲突。
其中启动其他合并工具意思就是通过其他解决冲突的工具来解决冲突,比如可以直接使用Visual Studio软件打开.cs文件然后在文件中根据实际情况修改内容后将冲突标记成解决的方式解决冲突。
SourceTree使用忽略文件
创建忽略文件
单击Explore(文件夹)打开工作区目录,在工作区目录创建.gitignore文件(如果存在就不创建),通过文本编辑器打开然后将文档上半部分介绍的.gitignore模板内容复制进去(如果你的工作区目录内容是C#工程时,不是请自己编辑或者查找模板),然后将忽略文件提交到远程。
验证忽略文件
忽略文件编辑完成后需要验证是否生效,可以通过新建被忽略文件然后在SourceTree中通过筛选工具选择ignore文件中是否包含新文件方式验证是否生效。也可以通过使用 git check-ignore -v <file>
命令来测试一个文件是否被 .gitignore
中的规则所忽略。
忽略文件未生效解决方案
在忽略文件中已经添加了的忽略规则但是未生效的文件,其主要原因是文件已经被提交到版本控制中,.gitignore
文件对这个文件的忽略规则就不会再起作用。在这种情况下需要在远程版本库中删除该文件,然后从SourceTree重新拉取更新到本地版本库后.gitignore文件才能对所有本地库生效。