- Git 是目前世界上最先进的分布式版本控制系统
- MacOS:brew install git, 终端中输入命令 git --version
Git 基本概念
- 文件状态
- 未跟踪(Untracked)
- 未修改(Unmodified)
- 已修改(Modified)
- 暂存区(Staged)
- 三个工作区域
- 工作区(Working Directory)
- 暂存区(Staging Area)
- 仓库区(Repository)
- 工作树(Worktree)
Git 工作流程
基于 Git 的远程仓库
远程仓库 | 地址 | 备注 |
---|---|---|
GitHub | https://github.com/ | 世界上最主流的远程开源仓库。 |
Gitee | https://gitee.com/ | 国内目前比较主流的开源仓库,也可以私有化部署。 |
(推荐) | ||
GitLab | https://gitlab.com/ | 私有化部署,企业使用较多。 |
应用场景:
- 获取远程仓库代码:开源代码、项目代码。
- 项目协作:维护自己的代码、多人维护同一项目
Git 同步命令
- 克隆远程仓库:git clone
远程连接方式 | 特点 |
---|---|
HTTPS 连接 | 使用给定 URL 即可 clone,在 push 时验证用户名和密码。 |
SSH 连接 | 需要提前添加 SSH Key,在 push 时不需要输入用户名,配置 SSH 时设置了密码才需要输入密码。 |
HTTPS 连接
- 配置全局帐号:
- 配置用户名:
git config --global user.name "your name"
- 配置邮箱:
git config --global user.email "your_email@youremail.com"
- 配置用户名:
- 验证配置结果:
git config --global --list
SSH 连接
- 生成 SSH Key:
- ssh-keygen -t rsa -C “your_email@youremail.com”
- 连敲三次回车键。
- 到对应目录下找生成的公钥和密钥。、
注意:
如果我们 Mac 上面已经有了 ssh-key 再创建 ssh-key 的话,默认会在 ~/.ssh/ 目录下生成 id_rsa 和 id_rsa.pub 两个文件,如果不自定义,就会把原有的给覆盖掉。为了加以区分,我们需要自定义一下生成的 key 的名字,后面的id_rsa_test_174为自定义的名字
Enter file in which to save the key (/Users/a-375/.ssh/id_rsa): id_rsa_test_174
拉取远程仓库
- 拉取远程仓库到本地:git pull(想要把远端最新的内容同步到本地时候用)
初始化仓库
- 在已存在的目录中初始化仓库:
- git init
- 关联远程仓库:
- git remote add origin
- git pull --allow-unrelated-histories origin master
(第一次连接完本地和远程仓库之后,首次同步远程仓库内容)
Git 修改命令
跟踪新文件:
- 添加文件或目录到暂存区:
git add <file>/<directory>
- 跟踪某个文件:git add new_file.txt
- 跟踪当前目录下所有文件: git add .
提交更新
- 提交到本地仓库:
git commit -m "comments"
- 已修改文件跳过使用暂存区域:
git commit -a -m "comments"
推送到远程仓库
- 推送本地仓库到远程仓库:
git push
Git 常用调试命令
检查当前文件状态
- 查看文件状态:
git status
查看已暂存和未暂存的修改
- 比较当前文件和暂存区域快照之间的差异:
git diff
- 查看已暂存的将要添加到下次提交里的内容:
git diff --staged
撤销操作
- 撤销对文件的修改:
git checkout <file>
- 取消暂存:
git reset HEAD <file>
移除文件
- 删除文件:
git rm -f <file>
- 移出暂存区:
git rm --cached <file>
忽略文件
-
.gitignore
文件。 - 有些文件无需纳入 Git 的管理。
- 比如日志文件,或者编译过程中创建的临时文件。
Git 合并与冲突
分支合并应用场景
- 合入主分支。
- 主分支合并其他分支:
- 通常使用 Merge Request 的方式。
- 通常使用 Merge Request 的方式。
分支管理
- 概念:
- 每次提交,Git 都把它们串成一条时间线,这条时间线就是一个分支。
- 价值:
- 多人协作。
- 环境管理。
创建分支
- 新建分支,但仍然停留在当前分支:
git branch 分支名
- 新建分支并直接切换至该分支:
git checkout -b 分支名
查看分支
- 列出所有本地分支:
git branch
- 列出所有远程分支:
git branch -r
- 列出所有本地与远程分支:
git branch -a
切换分支
- 切换到指定分支:
git checkout 分支名
删除分支
- 删除指定分支:
git branch -d 分支名
合并分支
- 合并指定分支到当前分支:
git merge 其他分支 本分支
- 变基:重新设置基准:
git rebase 其他分支
注意:
在合并分支的时候,如果想将A分支合并到B分支,当前分支应该先切换到B分支
也可以用:git merge branchname
这个命令把分支"branchname"合并到了当前分支里面
什么是冲突
- 冲突:在并行工作的模式下,工作最终会发生重叠。当多个成员以不同的方式更改同一行内容时,在这种情况下,Git 无法判断哪个版本是正确的,这时就会产生冲突。
- 冲突场景:
- 多个分支代码合并到一个分支时。
- 多个分支向同一个远端分支推送代码时。
解决冲突
- 解决冲突方式:
- IDE 中解决冲突:选择要保留的内容点击 Accept,保存代码。
- 文件中解决冲突:保留需要的内容,删除其余内容,去掉分割线,保存代码。
- 冲突解决流程:
- 在本地当前分支上,修改冲突内容。
- 执行
git add .
添加到暂存区。 - 执行
git commit -m '提交说明'
提交到本地仓库,完成合并。 - 执行
git push
提交到远程仓库。