下面是一份简单的Git实战教程,主要涵盖几个基础操作步骤:
1. 安装Git
首先,你需要在你的计算机上安装Git。你可以去Git官方网站下载并安装对应操作系统的版本:https://git-scm.com/downloads
2. 创建版本库(Repository)
在本地创建一个新的Git仓库:
bash
mkdir myproject
cd myproject
git init
这里的myproject是你自定义的项目名称。
3. 添加文件并提交
在项目中创建或复制文件后,使用以下命令添加文件到暂存区并提交:
bash
touch README.md
git add README.md
git commit -m "Initial commit with README file"
4. 设置用户名和邮箱
在首次使用Git前,你需要设置你的用户名和邮箱,这对于跟踪提交记录非常重要:
bash
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
5. 连接到远程仓库(如GitHub、GitLab或Gitee)
首先在远程仓库平台创建一个新的空仓库。然后,将本地仓库与远程仓库关联并推送上代码:
bash
# 添加远程仓库地址
git remote add origin https://github.com/yourusername/yourrepository.git
# 推送本地仓库到远程仓库(默认分支为master,现在一般推荐main)
git push -u origin main
6. 克隆现有仓库
如果你想要克隆一个已经存在的远程仓库到本地,可以这样做:
bash
git clone https://github.com/otheruser/someproject.git
7. 日常操作
查看状态:git status
拉取更新:git pull origin main
添加改动:git add . (添加所有改动)或 git add <file> (只添加指定文件)
提交改动:git commit -m "Commit message"
推送改动:git push origin main
8. 分支管理
创建分支:
bash
git branch feature-x # 创建名为feature-x的新分支
切换分支:
bash
git checkout feature-x # 切换到feature-x分支
或使用新版本的Git(>= 2.23)中的简洁命令:
bash
git switch feature-x
创建并立即切换到新分支:
bash
git checkout -b feature-x # 创建并切换到名为feature-x的新分支
或使用新版本的Git命令:
bash
git switch -c feature-x
合并分支:
bash
git checkout main # 切换回主分支
git merge feature-x # 将feature-x分支的更改合并到当前分支(这里是main)
删除分支:
bash
git branch -d feature-x # 删除已合并的feature-x分支
如果分支未被合并并且你想强制删除,可以使用 -D 代替 -d。
9. 处理冲突
在合并过程中可能出现冲突,此时需要手动解决冲突,并再次提交。
1.当出现冲突时,编辑冲突文件,保留你希望保留的部分,移除Git插入的冲突标记(例如 <<<<<<< HEAD, =======, >>>>>>> otherbranch)。2.使用 git add 命令将解决冲突后的文件加入暂存区。
执行 git commit 以提交合并。
10. 标签管理
创建标签:
bash
git tag v1.0 # 创建一个名为v1.0的标签,指向当前HEAD
git tag -a v1.1 -m "Version 1.1 release" HEAD^ # 创建带有注释的标签,指向HEAD的父提交
推送标签到远程仓库:
bash
git push origin --tags # 将所有本地标签推送到远程仓库
11. 查看历史记录
查看提交历史:
bash
git log # 显示详细的提交历史
查看简洁历史:
bash
git log --oneline # 显示每条提交记录的简洁摘要
查找特定提交:
bash
git log --grep="关键词" # 根据提交信息中的关键词搜索
查看某次提交的内容差异:
bash
git diff <commit-id> # 查看指定提交与上一次提交之间的差异
git show <commit-id> # 显示指定提交的详细信息以及内容差异
12. 回滚操作
撤销最后一次提交(未推送):
bash
git reset --soft HEAD~1 # 保留更改,撤销提交
git reset --hard HEAD~1 # 删除更改,撤销提交
回滚到任意提交:
bash
git checkout <commit-id> # 检出特定提交,但不会改变HEAD指针
git reset --hard <commit-id> # 强制重置HEAD指针到指定提交,丢弃之后的所有提交
撤销对工作区的修改:
bash
git checkout . # 恢复所有未暂存的更改
13. 配置忽略文件
创建.gitignore文件,列出不想被Git追踪的文件或文件类型。例如:
bash
*.log
build/
dist/
node_modules/
.env
14. 存储密码和凭证
为了避免频繁输入GitHub/GitLab等远程仓库的用户名和密码,可以使用git-credential-cache或git-credential-store存储凭证,或者配置SSH密钥。
15. 子模块管理
添加子模块
子模块允许你将一个Git仓库作为另一个Git仓库的组成部分。要添加子模块到你的项目中:
bash
git submodule add https://example.com/submodule.git path/to/submodule # 添加子模块
这里,https://example.com/submodule.git 是子模块仓库的URL,path/to/submodule 是你希望在项目中放置子模块的路径。
克隆包含子模块的仓库
当你克隆一个包含子模块的项目时,需要运行两个命令:
bash
git clone https://example.com/main-repo.git # 克隆主仓库
cd main-repo
git submodule update --init --recursive # 初始化并拉取所有子模块
更新子模块
若要更新子模块至特定版本或最新版本,需进入子模块目录:
bash
cd path/to/submodule
git fetch origin
git checkout <branch-or-commit>
cd ..
然后更新父项目的子模块引用:
bash
git add path/to/submodule
git commit -m "Update submodule to a new version"
16. Stash(暂存)
保存未提交的更改
当你需要暂时把未提交的更改放到一边,以便切换分支或执行其他操作时,可以使用stash:
bash
git stash # 保存所有未提交的更改
恢复暂存的更改
要恢复暂存的更改,可以使用以下命令:
bash
git stash apply # 应用最近暂存的更改
git stash pop # 应用并删除最近暂存的更改
17. Pull Request 和 Merge Request
在GitHub、GitLab等托管平台上,Pull Request(PR)或Merge Request(MR)是一种常见的协作方式,用于向项目贡献代码。开发人员通常会从自己的分支发起PR/MR,请求项目管理员或维护者将其更改合并到主分支。
18. 交互式Rebase
交互式Rebase允许你修改一系列提交的历史,包括但不限于合并提交、重排提交顺序、修改提交消息以及 squash(压缩)多个提交。
交互式Rebase示例
假设你想整理一下最近的几个提交,可以使用以下命令:
bash
git rebase -i HEAD~4 # 对最近4个提交进行交互式重做
这将会打开一个文本编辑器,列出最近4个提交及其哈希值。在这个文本文件中,你可以:
将pick改为reword以修改提交消息将pick改为edit以临时停止重做过程并在提交之间进行修改
将pick改为squash或fixup以合并提交
改变提交的顺序,即移动各行的位置
保存并关闭编辑器后,Git会按照你指定的方式重新应用这些提交。
19. Cherry-Pick
Cherry-pick命令让你能够选择性地将某个提交应用到当前分支。
bash
git cherry-pick <commit-hash> # 把指定提交的内容复制到当前分支的新的提交中
20. Reflog
Reflog记录了所有HEAD和分支引用的变化,即使那些已经被删除的提交也能在这里找到。
查看Reflog
bash
git reflog # 显示所有HEAD的引用日志
如果你误删了提交或丢失了分支,Reflog可以帮助你找回它们。
21. 工作流示例
Git的工作流有很多,如集中式工作流、特性分支工作流、Forking工作流、GitFlow工作流等。选择哪种工作流取决于团队的需求和规模。
例如,在特性分支工作流中,每个新功能或修复都创建在一个独立的分支上,完成后再合并回主分支。
以上内容只是Git强大功能的一部分。掌握这些基础知识后,你可以根据团队需求选择适合的工作流,更好地利用Git进行版本控制和协作开发。随着实践的深入,你会发现Git在大型项目管理、多人协作等方面提供的众多高级特性非常有价值。