git仓库相关笔记

一、基本概念

仓库(Repository)
存放项目代码的地方,可以在文件系统中看到的一个目录。这个目录下有一个.git的子目录,包含了Git的所有元数据和对象数据库。

提交(Commit)
项目的一个快照,它会记录下当时所有跟踪文件的状态。

分支(Branch)
一个独立的工作流,你可以在不影响主线(通常是main或master分支)的情况下进行开发和测试。

合并(Merge)
将一个分支的更改合并到另一个分支上。

冲突(Conflict)
当合并时,两个分支在同一部分代码上有不同的更改,Git无法自动解决。

远程仓库(Remote)
托管在网络或其他位置的版本库,可以有多个(例如,GitHub、GitLab、gitea、gittee等)。

二、使用步骤

1. 配置git

使用Git之前,需要配置用户名和电子邮件地址。

git config --global user.name "名称"
git config --global user.email "邮箱地址"

2. 仓库初始化

创建一个新的Git仓库或将现有目录转换为Git仓库。

git init

3. 克隆仓库

git clone 你的远程仓库地址

只克隆某个分支

git clone -b 分支名称 仓库地址

通过ssh克隆

  • 查看是否已经有ssh
cd ~/.ssh //进入ssh配置目录
ls //查看目录下文件

id_rsa 和 id_rsa.pub:默认的 RSA 密钥对。
id_ecdsa 和 id_ecdsa.pub: ECDSA 密钥对。
id_ed25519 和 id_ed25519.pub:Ed25519 密钥对。

  • 本地生成ssh(如果需要)

生成 ed25519密钥

ssh-keygen -t ed25519 -C "your_email@example.com"

生成rsa密钥

 ssh-keygen -t rsa

在生成的时候,需要输入要保存密钥的文件(根据自己喜好)以及输入密码短语 passphrase (可以为空)

具体操作示例如下:

在这里插入图片描述

  • 查看已经生成的密钥
    默认的密钥保存在id_rsa.pub文件,但是刚刚我生成的第二个密钥保存在 id_rsa_gitee.pub文件中
cat ~/.ssh/id_rsa_gitee.pub
  • 配置密钥到远程仓库(以gitee为例)

在这里插入图片描述

配置完成之后,就可以通过ssh与远程建立连接和克隆

4. 添加文件

将文件更改添加到暂存区

git add * //如果是整个文件夹的内容都提交使用 *代表提交所有
git add 你的文件名 //可以提交单个文件

5.提交更改

将暂存区的更改提交到仓库

git commit -m 你的提交备注

三、其他操作指令

1. 查看状态

查看当前工作目录和暂存区的状态 ~

git status

2. 查看历史

查看提交历史

git log

查看当前代码版本

git log -1

3. 创建分支

创建一个新的分支

git bransh 分支名称

4. 切换分支

切换到指定的分支 并更新工作目录

git switch <branch-name>
# 或
git checkout <branch-name>

如果分支在你最初克隆仓库时不存在,需要现在本地创建对应的分支

git fetch // 同步远程仓库分支列表
git checkout 切换到分支

或
 //创建并切换到新的本地分支(该分支跟踪远程分支)
git checkout -b 远程新分支 origin/远程分支 

5. 合并分支

将一个分支的更改合并到当前分支

//查看当前分支
git branch -a
//分支合并
git merge 分支名称

还有一种合并分支是 变基合并
会将一个分支的更新重新应用(变基)到另一个分支上。
这种方式可以创造一个更线性、更干净的提交历史

git checkout 要变基的分支
git rebase main //变基
git rebase --continue //变基解决冲突之后 继续变更

6. 撤销更改

撤销工作目录中的更改。

git checkout -- 文件名称

7. 重置

重置当前HEAD到指定状态

git reset --hard 提交的标签

8.本地和远程仓库分支同步

git fetch origin

9.比较本地和远程分支的差异

git log HEAD..origin/<branch_name> --oneline

四、代码拉取 和 推送

git pull
git pull 从远程仓库获取最新的更改并合并到当前分支。
如果是多人合作 或是有多个分支的仓库 使用git pull 会在远程提交记录中 出现一串mergin…的多余提交
可以使用git pull --rebase的方式实现
在这里插入图片描述
git push
代码可以使用git push推送到远程仓库

vscode插件

如果你使用vscode进行代码开发,也可以通过插件对仓库进行操作

在这里插入图片描述

安装插件之后,可以简化代码提交的步骤 commit 就相当于是 git commit -m ‘xxxxx’

在这里插入图片描述

五、 保存当前工作进度

团队合作的时候,本地有代码改动,又想要拉取仓库代码;

如果本地的代码已经完成可以先push再pull
但是如果没有完成 可以使用git stash实现

git stash
可以保存当前工作进度,将修改暂存,让你的工作目录回到上次提交的状态

在这里插入图片描述

如果想要应用之前被暂存的更改,可以使用 git stash pop

这会将之前暂存的更改应用到当前工作目录,并尝试合并。

git stash //暂存

git stash pop //恢复暂存

如果放弃之前暂存的更改,可以使用 git stash drop 丢弃之前保存的暂存记录。

如果有多个暂存的更改,可以使用 git stash list 查看所有的暂存记录,并使用 git stash drop stash@{<stash_number>} 来指定丢弃特定的暂存记录。

注意 在使用 git stash pop 之后,默认情况下暂存记录会被移除。如果想保留暂存记录,可以使用 git stash apply,这会应用更改但不会移除暂存记录。

仓库分支实践-创建

前提: 远程仓库上有很多分支
目的: 在某个分支的基础上,创建一个新的分支

比如:
想要拉取main分支上的内容,并想在main基础上创建一个新的my/feat分支

  1. 克隆远程仓库代码
//克隆远程仓库代码
git clone xxx.git
  1. 切换想要的分支
git branch //查看当前分支
git checkout main //切换到main分支
  1. 同步远程分支最新代码
git pull origin main 
  1. 在该基础上创建新的分支(my/feat)
git checkout -b my/feat
  1. 将创建的分支同步到远程仓库
git push --set-upstream origin my/feat

仓库分支实践-拉取

场景:远程新增一个分支,本地分支数量和远程分支不同步
目的:切换本地分支后需要同步最终远程分支,并提交代码

  1. 切换到需要分支
  2. 拉取远程最新代码
git checkout feat/store
git pull origin feat/store
  1. 建立本地分支 feat/store 追踪远程 feat/store
git branch --set-upstream-to=origin/feat/store feat/store
  1. 如果本地分支落后于远程分支,需要再次git pull 拉取最新远程代码
  2. 如果有冲突需要先解决冲突 之后git push

六、选择性合并分支

场景: 两个远程分支,A分支需要B分支中的某一次的提交

目的:
修复错误:如果你在一个分支上修复了一个错误,并希望将这个修复应用到其他分支上,而不是合并整个分支。
拾取特性:在多分支开发中,某个特性可能首先在一个特定的分支上开发和测试。一旦这个特性稳定,你可能想要将其引入到主分支或其他分支中。
代码审查:在一些工作流程中,开发者可能在个人分支上进行开发和提交,然后通过 cherry-pick 将选定的提交移动到一个集成分支上进行构建和测试。

代码:
git cherry-pick <commit-hash>

选择单条提交

比如:创建了两个分支,其中一个分支做了很多更改,但是担心不稳定影响到主分支。此时主分支需要你的其中一个更改。

  1. 需要查看需要的提交编码
    远程仓库在提交完之后会有一个提交的哈希值 以gitee为例
    在这里插入图片描述

  2. 切换到想要更改的分支
    比如你的master需要获取到feat分支的某一条记录

//切换到master
git checkout master
git branch //查看当前所在分支
  1. 执行代码
git cherry-pick b3e1ed 
  1. 为了确保准确性 可以查看一下当前的日志 确认是否是自己需要的
git log
  1. 没问题就推送git push

选择多个提交

除了上面说的选择单词也可以一次性应用多个提交,只需要在命令中列出所有提交的哈希值,用空格分隔

也可以 应用一个范围提交

git cherry-pick <start-commit-hash>^..<end-commit-hash>

上面的^ 表示 包含开始的提交

注意

  1. 冲突:
    如果遇到冲突,需要手动解决冲突,然后使用 git cherry-pick --continue 来继续应用提交,或者使用 git cherry-pick --abort 取消 cherry-pick 操作
  2. 提交的独立性:
    如果被选中的提交依赖于其他未被选中的提交的更改,可能会引入问题。
    你需要确保所有相关的依赖也被一并移动,或者准备好解决可能出现的冲突。
  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值