Git入门教程

介绍Git的常用操作,分享学习资料。

学习资源

先学习Git的工作流,熟悉Git的操作,即可完成大部分操作。想要深入的同学可以继续学习git的文件内容及原理和Git的官方教材。

b站视频git基础以及工作流
b站视频git文件内容及原理
书籍Git官方教材
练习练习地址

安装配置

下载

官网下载对应系统的安装包,默认安装即可。

配置信息

使用前需要配置用户信息:

  • 配置账号:git config --global user.email "常用邮箱地址"
  • 配置邮箱:git config --global user.name "用户名"
  • 查看配置:git config --global --l

如果需要使用GitHub或Gitee建议配置一下ssh免密连接:

  • 生成密钥对:ssh-keygen -t rsa
  • 将生成的公钥(C:\User\账户名\.ssh\id_rsa.pub)添加到GitHub的SSH keys中即可。

如果GitHub访问慢,可以配置代理(注意clone时需要使用HTTPS的链接):
git config --global http.https://github.com.proxy socks5://127.0.0.1:1086
git config --global https.https://github.com.proxy socks5://127.0.0.1:1086

基础操作

创建仓库

通常有两种创建方式:

  • 在本地直接创建Git仓库:git init,创建后会生成一个.git的隐藏文件保持文件信息(以.开头的文件通常是配置文件,默认不可见)。
  • 克隆GitHub上的项目:git clone 链接,克隆默认命名的项目。如果需要改变项目名,可以使用git clone 链接 新项目名

保存文件

Git有三个分区:工作区、暂存区和本地库。

  • 工作区是当前可见的文件夹
  • 暂存区用于暂存提交文件
  • 本地库用于保存提交记录

比较难理解的是处于中间态的暂存区,明明只需要将工作区的文件提交到本地库就可以实现版本控制了,为什么需要一个暂存区呢?其主要作用是方便提交。如果没有暂存区,若编码时修改了多处,在提交时需要一次性打上所有文件,容易出错。而暂存区的存在则方便我们多次添加文件,确认无误后再提交。

Git会检测工作区文件的增、删和修改情况,输入git status可以查看。当代码编写完要保存时,先将需要保存文件添加到暂存区git add filenames,确认后无误后提交到版本库git commit -m “注释”,提交后会生成一次记录。若要查看提交记录,可以输入git log
保存流程

.gitignore

Git默认会去监管所有文件,而有些文件我们并不关心(例如日志输出),调用git status会输出这些我们不关心的文件信息,十分繁琐。可以通过配置.gitignore文件解决这一问题。

# 忽略所有的 .a 文件
*.a

# 但跟踪所有的 lib.a,即便你在前面忽略了.a文件
!lib.a

# / 在最前面表示只对根目录有效
# / 在最后面表示是文件夹
/data/ # 忽略根目录下的data文件夹
data/ # 忽略所有的data文件夹

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

分支

分支相当于一个指针,指向提交记录上的一个节点,方便定位版本库中的提交记录。而在多人开发中,其最大的优势是减少冲突。每个成员在自己的分支上开发,可以暂时忽略其它成员的存在,只有在开发结束需要合并时才需要考虑冲突。

创建分支:git branch 分支名
切换分支:git checkout 分支名
创建并切换分支:git checkout -b 分支名
移动分支:git branch -f 分支名 目标commit
查看分支:git branch
合并分支:git merge 副分支名,先切换到主分支,再合并副分支
删除分支:git branch -d 分支名

远程仓库

首先需要绑定上远程仓库git remote add 仓库别名 链接,绑定后可以查看远程仓库信息git remote -v。常用操作是拉取git fetch和推送git push

拉去并合并:git pull
推送并绑定分支: git push -u 仓库别名 分支名 ,绑定后可用git push推送。

标签

给比较重要的commit打上标签,方便检索:git tag -a 标签名 -m 注释
删除标签:git tag -d 标签名
列出标签:git tag
推送标签:git tag origin 标签名
推送所有标签:git push --tags

进阶操作

修改操作

用版本库恢复文件:git restore 文件名
错误add文件后,取消添加:git restore --staged 文件名
将分支移动到对应版本:git reset --soft 版本号,用于修改提交
用版本库覆盖暂存区:git reset 版本号,用于修改提交
用版本库覆盖工作区:git reset --hard 版本号,用于丢弃修改
修改上一次提交:将暂存区设置成需要的提交,再输入git comit --amend,相当于git reset --soft HEAD~git commit
用于版本回退(复制老节点):git revert 版本号

修改提交记录

变基:通过嫁接的方式,使得合并记录保持线性。(只能在本地使用,不能变基以提交到远端的记录)

  • 将副分支接到主分支:git rebase 主分支 副分支
  • 压缩提交:git rebase -i HEAD~4,修改最新的4个分支(可以将其压缩成一个)

挑选:可以挑选指定需要的节点,适合多种分支合并,保留最关键的节点。

  • 挑选需要的记录:git cherry-pick 版本号1 版本号2 ...

分离头指针

当HEAD直接指向commit时,称为分离头指针的状态:git checkout 版本号
描述头指针的位置信息:git describe,默认当前的HEAD位置

相对引用

横向相对引用:^ 表示上一层的横向第一个(爸爸),^2上一层的横向第二个(妈妈)
纵向相对引用:~表示上一层的第一个(爸爸),~2上2层的第一个(爷爷)
可以叠加:bugFix ~^2bugFix分支的奶奶

临时保存

checkout到其它分支时,要求当前工作区干净。可以使用commit提交也可以使用stash临时保存
保存:git stash push
恢复:git stash pop
帮助:git stash -h

工作流

  1. 在本地创建库
  2. 在远端创建库
  3. 完成绑定,并做第一次提交
  4. 两个常在分支:main、dev
  5. 开发新特性:由dev创建出feature,在feature上开发(推荐开发完一个部分就提交,全部完成后做变基保持简洁)
  6. 开发完后切换到dev分支,先做拉取,再做合并,再提交
  7. 如果5的开发过程中遇到bug,就先暂存一下当前工作区,再切到main上创建bugFix,修复完bug再回到feature继续工作

练习解答

基础篇

# 1. 连续提交2次
git commit
git commit

# 2. 创建分支
git branch bugFix 
git checkout bugFix 
# 合并 git checkout -b bugFix

# 3. 合并分支
git checkout -b bugFix 
git commit 
git checkout main
git commit 
git merge bugFix

# 4. 变基
git checkout -b bugFix
git commit 
git checkout main
git commit
git rebase main bugFix

高级篇

# 1. 分离HEAD
git checkout c4

# 2. 相对位置
git checkout bugFix^

# 3. 移动分支
git branch -f main c6
git checkout HEAD~
git branch -f bugFix HEAD~

# 4. 撤销提交
git reset main
git checkout pushed
git revert pushed

自由修改提交树

# 1. 采取
git cherry-pick c3 c4 c7

# 2. 当链条变基
git rebase -i overHere 

杂项

# 1. 挑选提交
git checkout main
git cherry-pick bugFix

# 2. 修改提交
git rebase -i main
git commit --amend
git rebase -i main
git branch -f main caption

# 3. 修改提交
git checkout main
git cherry-pick 	newImage
git commit --amend
git cherry-pick caption

# 4. 打标签
git checkout HEAD~
git tag v0 HEAD~
git tag v1 HEAD

# 5. 位置描述
# git describe 可以查看当前的位置
git commit

多次rebase

# 1. 多次rebase
git rebase bugFix
git rebase main side
git rebase side another
git branch -f main another

# 2. 连续相对定位
git branch -f bugWork main~^2~

# 3. 挑选(好像只有cherry-pick可以复制)
git checkout one
git cherry-pick c4 c3 c2
git checkout two
git cherry-pick c5 c4 c3 c2
git branch -f three c2

远程仓库

# 1. 克隆
git clone

# 2. 提交
git commit
git checkout o/main
git commit

# 3. 拉取
git fetch

# 4. 拉取&合并
git pull

# 5. 综合
git clone
git comit
git fakeTeamwork 2
git pull

# 6. 提交
git commit 
git commit
git push

# 7. 拉取&合并&提交
git clone
git commit 
git fakeTeamwork
git pull --rebase
git push

# 8.创建分支&提交
git checkout -b feature
git push
git branch -f main HEAD~

困难提交

# 1. 提交
git fetch
git rebase o/main side1
git rebase side1 side2
git rebase side2 side3
git rebase side3 main # 这个比git bracn -f 快
git push

# 2. 拉取&合并&提交(这题只要合并,不需要和图一模一样)
git checkout main
git pull
git merge side1
git merge side2
git merge side3
git push

# 3. 不同名字的对应(不推荐)
git chckout -b side o/main
git commit 
git pull -rebase 
git push

# 4. 直接提交
git push origin main
git push origin foo

# 5. 不对应分支名推送(不推荐)
git push origin foo:main
git push origin main~:foo

# 6. 拉取不按名称(不推荐)
git fetch origin foo:main
git fetch origin main~:foo
git checkout foo
git merge main

# 7.删除和创建分支
git push origin :foo
git fetch origin :bar

# 8. 拉取合并
git pull origin bar:foo
git pull origin main:side
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值