目录
- 1、介绍
- 1.1、Git 简介和优势
- 1.2、版本控制基本概念
- 2、安装 Git
- 3、配置 Git
- 3.1、配置用户信息(必要)
- 3.2、配置文本编辑器(非必要)
- 3.3、配置别名(非必要,新手不建议)
- 3.4、查看配置
- 3.5、配置忽略文件
- 4、创建仓库
- 4.1、在本地创建仓库
- 4.2、在远程托管平台创建仓库
- 4.3、关联远程仓库
- 5、基本操作
- 5.1、初始化仓库
- 5.2、查看工作目录和暂存区的当前状态
- 5.3、添加文件到暂存区
- 5.4、提交更改
- 5.5、查看提交历史
- 5.6、比较工作目录和暂存区之间的差异
- 5.7、版本回退
- 5.8、恢复工作目录中的更改
- 5.8、撤销提交
- 6、分支管理
- 6.1、创建分支
- 6.2、切换分支
- 6.3、合并分支
- 6.4、解决冲突
- 6.5、删除分支
- 7、远程仓库
- 7.1、关联远程仓库
- 7.2、推送代码到远程仓库
- 7.3、拉取代码
- 7.4、解决远程仓库冲突
- 7.5、查看远程仓库
- 8、高级操作
- 8.1、重写历史
- 8.2、使用储藏和恢复
- 8.3、管理子模块
- 9、团队协作
- 9.1、Git 团队协作流程
- 9.2、解决团队协作冲突
- 9.3、代码审查
- 9.4、分支保护和权限管理
- 10、附录
- 常用 Git 命令速查表
- 基本操作
- 分支操作
- 远程仓库操作
- 高级操作
- 团队协作
- 常见问题解决
1、介绍
1.1、Git 简介和优势
Git是一种分布式版本控制系统,用于跟踪文件和目录的变化,以及协调多个人员之间的代码协作。相比于传统的集中式版本控制系统,如SVN,Git具有许多优势:
- 分布式: 每个开发者都有一份完整的代码仓库,可以在离线状态下工作,减少对中央服务器的依赖。
- 高效性: Git对于历史版本的管理非常高效,基于快照而不是差异。
- 分支管理: Git鼓励使用分支进行并行开发,方便实现不同功能和修复同时进行。
- 易于协作: 多人协作时,可以轻松地合并和解决冲突。
- 安全性: Git使用哈希值保证数据的完整性,避免了数据损坏。
- 开源: Git本身是开源的,拥有庞大的社区支持。
1.2、版本控制基本概念
在使用Git之前,了解一些基本的版本控制概念是很重要的:
- 仓库(Repository): 一个Git仓库是一个存储你项目所有文件和历史版本的地方。
- 提交(Commit): 提交是保存代码更改的操作,每次提交会生成一个唯一的哈希值用于标识。
- 分支(Branch): 分支是用来进行并行开发的,你可以在分支上进行实验性的更改而不影响主线。
- 主分支(Main Branch): 通常是main或master分支,代表项目的稳定版本。
- 合并(Merge): 将一个分支的更改合并到另一个分支。
- 冲突(Conflict): 当多个分支的更改发生冲突时,需要手动解决。
2、安装 Git
在Windows上安装git
访问Git官网(https://git-scm.com/)。
下载适用于Windows的Git安装程序。
运行安装程序,按照提示完成安装。
3、配置 Git
在你安装了Git后,为了确保你的个人或项目特定的配置设置正确,你可以通过一些Git命令来进行配置。这些配置项将影响你在使用Git时的行为和体验。
3.1、配置用户信息(必要)
配置用户信息是非常重要的,因为每次你提交代码时都会有相应的提交者信息。
git config --global user.name "Your Name"git config --global user.email "your.email@example.com"
3.2、配置文本编辑器(非必要)
你可以配置一个默认的文本编辑器,以便你在进行提交信息或解决冲突时编辑文本。例如,如果你想使用Visual Studio Code:
git config --global core.editor "code --wait"
3.3、配置别名(非必要,新手不建议)
Git支持设置别名,使得你可以更快速地输入命令。比如,你可以设置一个别名"co"来代替"checkout"命令:
git config --global alias.co checkout
3.4、查看配置
你可以使用以下命令来查看当前的Git配置:
git config --list这会列出所有的全局和本地配置设置。
3.5、配置忽略文件
有些文件你可能希望Git自动忽略,例如编译产生的临时文件或敏感数据文件。你可以创建一个名为.gitignore的文件,并将需要忽略的文件和模式添加到其中。
# 示例 .gitignore 文件*.lognode_modules/secret.txt
通过这些配置,你可以将Git按照你的喜好进行个性化设置,从而更好地适应你的工作流程。
4、创建仓库
Git仓库是用于存储你的项目代码和历史版本的地方。你可以在本地计算机上创建仓库,也可以在远程托管平台(如GitHub、GitLab、Gitee、Bitbucket等)上创建仓库。下面将分别介绍如何在本地和远程创建仓库。
4.1、在本地创建仓库
在本地创建一个新的Git仓库非常简单。首先,进入你的项目目录,然后使用以下命令:
git init
这会在当前目录下创建一个新的Git仓库。Git会在项目根目录下生成一个.git文件夹,用于存储版本历史和配置信息。
4.2、在远程托管平台创建仓库
远程托管平台如GitHub、GitLab等提供了创建远程仓库的功能。这允许你将你的代码与团队成员或其他开发者共享。以下是在GitLab上创建远程仓库的步骤:
(1)登录到你的GitLab账号。
(2)在GitLab的主页上,你会看到一个导航栏,导航栏上通常有一个加号(+)图标,点击它展开菜单。
(3)在菜单中,选择"New project"或类似的选项。
(4)在创建项目页面,填写以下信息:
- Project name: 项目名称,这将是你的仓库的名称。
- Project slug: 项目标识符,通常是项目名称的小写,可以包含连字符。
- Project description: 项目描述,简要介绍项目的用途。
- Visibility Level: 项目的可见性设置,可以选择"Public"(公开)或"Private"(私有)。
- Initialize repository with a README: 是否在仓库中初始化一个README文件,你可以选择根据需要启用或禁用。
填写完毕后,点击"Create project"按钮。
(5)GitLab将为你创建一个新的远程仓库,并将你重定向到仓库页面。
(6)在仓库页面中,你将找到仓库的URL,这是你与远程仓库交互的链接。
4.3、关联远程仓库
在本地创建仓库或克隆已有仓库后,你可能想要将它与远程仓库关联起来,以便推送和拉取代码。
git remote add origin <remote-repository-url>
这里,origin是一个远程仓库的别名,你可以自己命名,是远程仓库的URL。
5、基本操作
5.1、初始化仓库
在一个目录中初始化一个Git仓库,使其成为Git可管理的仓库。
git init
5.2、查看工作目录和暂存区的当前状态
查看工作目录和暂存区的当前状态。获得有关你的代码库中文件的信息,包括已修改、已暂存和未跟踪的文件。
git status
例如,在本地仓库中新建一个文件1.txt,然后查看当前状态
5.3、添加文件到暂存区
在进行代码提交之前,需要将文件添加到Git的暂存区,以准备好提交。
//添加指定文件到暂存区git add <filename>//添加所有文件到暂存区git add .
你也可以使用通配符来添加多个文件。
此时执行git status再次查看状态
5.4、提交更改
提交暂存区中的更改到版本库中
git commit -m "Commit message"
合理的提交信息能够清晰地说明你的更改内容。
此时执行git status再次查看状态
5.5、查看提交历史
查看项目的提交历史,了解每次提交的详细信息。
//查看提交历史git log//以精简形式显示提交历史git log --oneline
5.6、比较工作目录和暂存区之间的差异
比较工作目录和暂存区之间的差异,或者比较两个提交之间的差异。
//比较工作目录和暂存区之间的差异git diff//比较暂存区和最新提交之间的差异git diff --staged//或git diff --cached//比较两个提交之间的差异git diff <commit-hash-1> <commit-hash-2>//比较指定文件的差异git diff <filename>
5.7、版本回退
新增两次提交
此时1.txt中的内容为:
此时想要进行版本回退有三种方式
//回退到上个版本git reset --hard HEAD^//回退到上上个版本git reset --hard HEAD^^//回退到前10个版本git reset --hard HEAD~10//回退到指定版本号的版本git reset --hard a7f365c128827cdf1f0d796141ce3c644cc78770
执行命令回退到上个版本,此时已看不到第三次提交并且1.txt中内容也回退到了对应版本
如果此时我们还想要重新回到版本回退前的版本,则可以使用git reset --hard [版本号] 来实现
//查询版本号git reflog//回退版本git reset --hard [版本号]
此时需要先获取到版本回退前的版本号,然后再执行版本回退
5.8、恢复工作目录中的更改
如果在修改添加到暂存区之前,想要撤销某个文件的修改可以使用以下命令
//将指定文件恢复到版本库中的版本git restore <filename>//将所有文件恢复到版本库中的版本git restore .//注意,旧版本不支持restore命令,需要使用该命令git checkout -- <filename>
如果修改已经添加到暂存区,想要撤销某个文件的修改可以使用以下命令
//放弃指定文件修改git reset HEAD <filename>//放弃所有文件修改git reset HEAD .
5.8、撤销提交
当你需要撤销之前的提交时,你可以使用git revert命令来创建一个新的提交,将之前的提交内容进行反转。这允许你保留之前的提交历史,同时也纠正了之前的更改。
//撤销一个提交git revert [版本号]//可以指定一个范围,撤销多个连续的提交git revert <start-commit>..<end-commit>
6、分支管理
Git的分支管理功能允许你在不影响主线代码的情况下进行并行开发、实验性改动和问题修复。了解如何创建、切换和合并分支,以及如何解决分支冲突非常重要。
6.1、创建分支
创建一个新分支,用于开发新功能或修复问题,保持主线代码不受影响。
//创建一个分支git branch <branch-name>//创建并切换到分支git branch -b <branch-name>
6.2、切换分支
切换到另一个分支,以便在不同的分支上进行不同的工作。
//切换分支git checkout <branch-name>//查看当前所在分支git checkout
6.3、合并分支
将一个分支的更改合并到另一个分支中。
git merge <branch-name>
在合并时可能会遇到冲突,需要手动解决。
6.4、解决冲突
当两个分支有不同的更改并且产生冲突时,需要手动解决冲突。
- 打开冲突文件,编辑并解决冲突。
- 使用git add 标记冲突已解决。
- 提交解决冲突的更改。
6.5、删除分支
当一个分支的工作已经完成,可以删除不再需要的分支。
git branch -d <branch-name>
请注意,如果分支中的更改尚未合并,删除分支时可能会出现警告。
7、远程仓库
将你的本地仓库与远程仓库进行关联,可以实现代码的共享和团队协作。在本节中,你将学习如何关联远程仓库、推送代码到远程仓库以及从远程仓库拉取代码更新。
7.1、关联远程仓库
将本地仓库与远程仓库关联起来,以便你可以推送和拉取代码。
注意:本地Git仓库和远程仓库之间的传输是通过SSH加密的,所以还需要将你的SSH密钥添加到远程仓库设置中。
git remote add origin <remote-repository-url>
在这里,<remote-repository-url>是远程仓库的URL。
7.2、推送代码到远程仓库
一旦关联了远程仓库,你可以将本地代码推送到远程仓库。
git push origin <branch-name>
这会将指定分支的代码推送到远程仓库。首次推送时,你可能需要使用 -u 参数来建立跟踪关系。
7.3、拉取代码
从远程仓库拉取代码更新,以保持你的本地代码同步。
git pull origin <branch-name>
这会将指定分支的最新代码拉取到你的本地仓库。
7.4、解决远程仓库冲突
在多人协作时,可能会遇到远程仓库的冲突。在推送代码之前,确保从远程仓库拉取最新的代码,以避免冲突。
7.5、查看远程仓库
你可以使用以下命令查看与本地仓库关联的远程仓库。
git remote -v
通过以上远程仓库操作,你可以实现代码的共享和协作,确保团队成员之间的代码同步。请根据你的实际项目需求和使用情况对上述内容进行编辑和扩展。
8、高级操作
除了基本操作外,Git还提供了一些高级操作,可以帮助你更灵活地管理代码和历史记录。在本节中,你将学习如何重写历史、使用储藏功能以及管理子模块。
8.1、重写历史
在某些情况下,你可能需要修改之前的提交历史,如合并、重新排序或删除提交。
- 修改最近一次提交信息:git commit --amend
- 交互式地修改提交历史:git rebase -i
8.2、使用储藏和恢复
储藏功能允许你将当前未提交的更改暂存起来,以便在切换分支或执行其他操作时恢复使用。
- 储藏当前更改:git stash
- 恢复储藏的更改:git stash apply 或 git stash pop
8.3、管理子模块
子模块允许你在一个Git仓库中嵌套另一个仓库,这对于依赖的管理非常有用。
- 添加子模块:git submodule add
- 更新子模块:git submodule update --init --recursive
- 删除子模块:详见Git文档
通过高级操作,你可以更灵活地处理提交历史、更改管理以及子模块等复杂情况。请根据你的实际项目需求和使用情况对上述内容进行编辑和扩展。
9、团队协作
在团队中协作使用Git时,需要注意协调各种活动以确保代码的正确性、稳定性和一致性。本小节将介绍如何在团队中使用Git进行协作。
9.1、Git 团队协作流程
- 使用主分支:主分支通常是稳定的版本,团队成员从这里创建自己的分支。
- 特性分支:每个新功能或修复都应该在自己的分支上进行开发。
- 提交和推送:团队成员定期提交并推送自己的分支更改。
- 代码审查:使用代码审查工具(如Pull Request)确保代码质量和规范。
- 合并:经过审查后,将特性分支合并到主分支。
- 解决冲突:如果有冲突,团队协作解决冲突并保持代码稳定。
9.2、解决团队协作冲突
在团队协作中,当不同成员的更改冲突时,需要解决这些冲突。以下是一些解决冲突的步骤:
- 拉取更新:在进行自己的更改之前,先拉取远程仓库的最新更新。
- 处理冲突:如果出现冲突,打开文件并手动解决冲突。
- 提交解决:将解决冲突后的文件提交到自己的分支。
- 更新远程仓库:将解决冲突的分支推送到远程仓库。
9.3、代码审查
代码审查是团队协作中的重要环节,可以帮助发现潜在的问题并提高代码质量。通常使用Pull Request(PR)工具进行代码审查。
- 创建PR:在特性分支开发完成后,创建一个Pull Request。
- 代码审查:团队成员审查代码,并提供反馈和建议。
- 更新和讨论:根据审查意见更新代码,并与团队成员讨论。
- 合并PR:经过审查和讨论后,将PR合并到主分支。
9.4、分支保护和权限管理
在团队协作中,可以使用分支保护和权限管理来确保代码的质量和安全性。
- 分支保护:限制谁可以直接将代码推送到主分支,只能通过PR合并。
- 权限管理:根据团队成员的角色,分配合适的权限,如写权限、合并权限等。
10、附录
常用 Git 命令速查表
基本操作
- 初始化仓库:git init
- 克隆远程仓库:git clone <repository-url>
- 查看状态:git status
- 添加文件到暂存区:git add <filename>
- 提交更改:git commit -m “Commit message”
- 查看提交历史:git log
- 查看文件差异:git diff <filename>
- 查看远程仓库列表:git remote -v
- 查看远程分支列表:git branch -r
分支操作
- 创建分支:git branch <branch-name>
- 切换分支:git checkout <branch-name> 或 git switch <branch-name>
- 创建并切换分支:git checkout -b <branch-name> 或 git switch -c <branch-name>
- 合并分支:git merge <branch-name>
- 删除分支:git branch -d <branch-name>
远程仓库操作
- 关联远程仓库:git remote add <remote-name> <repository-url>
- 推送代码:git push <remote-name> <branch-name>
- 拉取代码:git pull <remote-name> <branch-name>
- 创建Pull Request:在远程仓库上操作
- 获取远程仓库更新:git fetch
高级操作
- 重写历史:git commit --amend、git rebase -i <commit-hash>
- 使用储藏:git stash、git stash apply、git stash pop
- 管理子模块:git submodule add <repository-url>
- 重置和回退:git reset --soft <commit-hash>、git reset --hard <commit-hash>、git reflog
团队协作
- 创建Pull Request:在远程仓库上操作
- 代码审查:通过Pull Request 进行
- 解决冲突:手动编辑文件解决冲突
- 分支保护和权限管理:在远程仓库上设置
常见问题解决
- 解决冲突:手动编辑冲突文件
- 撤销错误提交:git reset --soft HEAD^、git reset --hard HEAD^、重写历史
- 丢弃未提交更改:git restore <filename>
- 追踪和忽略文件:git rm --cached <filename>、创建 .gitignore 文件