Git代码版本管理入门

简介: Git代码版本管理入门

Git代码版本管理入门

文章分为两部分,其一是通过在线交互式学习网站Learn Git Branching的学习笔记,内容较晦涩。虽然可视化学习更直观,但学过一遍后发现可能有些速成且脱离开发环境。其二是通过视频学习时的简单记录,内容简单,更贴近实际开发环境。

从Learn Git Branching中学习Git

Learn Git Branching是一个学习Git的网站,它有交互式操作和直观的分支图,能帮助Git 新手快速掌握Git

网络上有不少Learn Git Brancing的教程,这篇文章只是我在使用这个网站时随手写的一点内容,非常凌乱。

若有错误,还请各位指正

使用 git commit 来提交新节点,新节点将出现在目前选中的分支指向的节点下

使用 git branch 创建新分支,分支能指向一个节点,仅此而已。“早建分支!多用分支!”。新分支将指向目前分支指向的节点。

使用 git checkout 来切换分支,目前选中的分支将是你选中的分支

使用 git switch 也可选择新分支,它是一个新命令

如果像创建一个新分支同时切换到新创建的分支,可以使用 git checkout -b 来实现

当想合并节点时,git 会创建一个新特殊的提交记录,它有两个 parent 节点。更直观的来说,就是“我要把这两个 parent 节点本身及它们所有的祖先都包含进来。”。

简单来说,就是选中 main 分支进行操作,使用 git merge bugFix 后,main 分支将指向新节点,新节点的直接 parent 节点时 bugFix 分支指向的节点 和 main 分支在操作前指向的节点。

这里不难看出,上一段的 bugFix 分支和 main 分支指向的节点是同一深度的节点。如果在上段操作后,使用 git checkout bugFix,git merge main,这时 bugFix 分支将与 main 分支指向相同的新的节点,因为这个新节点是继承自它的两个父节点。

现在所有提交记录的颜色都一样了,这表明每一个分支都包含了代码库的所有修改!大功告成!

git rebase 也能合并分支,使用 git rebase 来将目前操作的分支指向的节点作为一个类似于新生成的节点在目标分支指向的节点的上方。然后再更新分支,使用 git rebase,选中目标分支,这时 git 就简单的将目前的分支向前移动了一下,表示完成了更新。

下面是分离 HEAD,这部分操作允许轻松在树上移动分支。HEAD 总是指向当前分支上最近一次提交记录。HEAD 通常情况下是指向分支名的。

在这个网页演示中,现在暂时不支持使用命令查看 HEAD 指向。如果想看 HEAD 指向,可以通过 cat .git/HEAD 查看, 如果 HEAD 指向的是一个引用,还可以用 git symbolic-ref HEAD 查看它的指向。

相对引用非常给力,这里我介绍两个简单的用法:

使用 ^ 向上移动 1 个提交记录

使用 ~<num> 向上移动多个提交记录,如 ~3

其中,^前面的操作符可以是节点,可以是分支,也可以是 HEAD 本身,HEAD 指向的是当前操作的分支。

~这个相对引用相当于使用了多次^,例如 git checkout HEAD~4 就是将 HEAD 向下移动了 4 次(越向下,越靠近根节点)。这里可以看作是目前的操作分支的索引是 0(类似于数组索引),移动了几次就是直接将分支指向那个数字的索引。

git branch -f main HEAD~3 就是将 main 强制移动到 HEAD 向下三次。

~(用 branch 移动非 HEAD 分支,用 checkout 移动 HEAD 分支,好怪哦)~

~(没有很怪,HEAD 分支指向分支,HEAD 分支只有一个,它指向的分支是当前选中的操作分支,可是将 HEAD 分离有什么用处呢?)~

git reset 和 git revert 用来撤销变更

git reset HEAD~1。这个操作将移动当前选中的分支,并回退它。在 reset 后, C2 所做的变更还在,但是处于未加入暂存区状态。

虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!

revert 之后就可以把你的更改推送到远程仓库与别人分享啦。

git revert 将生成新的节点,新节点将保存更改,也就相当于回退了节点

git reset 和 git revert 都将移动 HEAD 指向的分支,其后的参数是要移动的位置

git cherry-pick 提交号。使用 cherry-pick 用来将一些提交复制到 HEAD 上面(远离根节点的方向)。

git cherry-pick 接受参数,将其移动到 HEAD 指向的分支之下。

交互式 git rebase -i 接受参数,这个参数被当作 parent 节点,可以使用窗口调整选中分支之下的节点,选择忽略或者调整顺序,复制到 parent 节点下。同时,移动 HEAD 指向的分支移动到新复制的最上方的节点。

你随时都可以用 undo、reset 修正错误。

视频学习的小笔记

配置名字

git config --global user.name “Hugo”

配置邮箱

git config --global user.email “Hugo@itcast.cn”

没有引号内的那一项就是显示内容

使用 git init 生成 .git 目录,初始化 git 版本库

git 的工作区可抽象为 3 个,工作区,暂存区,版本库

将工作区存入暂存区

git add .

查看目前暂存区的文件

git ls-files

将暂存区文件提交到版本库

git commit -m

git 文件状态 分为未跟踪和已跟踪

使用 git commit 不会清空暂存区

查看文件状态

git status -s

第一列字母是文件在暂存区的状态,第二列字母是文件在工作区的状态

将暂存区的文件回退到工作区,工作区被覆盖

git restore

从暂存区移除文件

git rm --cached [target name]

查看 版本库内容(提交记录)

git log --oneline

git 回退版本,从版本库中回退文件到工作区和暂存区

保留工作区和暂存区内容,把版本库中的文件尽量退到工作区和暂存区

git reset --soft [version code]

回退文件,工作区和暂存区被覆盖

git reset --hard [version code]

git reset 的默认操作,覆盖暂存区,保留工作区

git reset --mixed [version code]

(–hard 比较常用)

查看版本的完整日志

git reflog --oneline

暂存区的代码会被 git add . 选中工作区的代码覆盖

git commit 是将暂存区的文件提交到版本库,与工作区无关

忽略文件

创建.gitignore 文件,在文件中写不想被跟踪的文件名或目录名,可以使用通配符,即使文件在几层目录下,也能直接忽略文件

分支

创建分支

git branch [branch name]

如果没有分支名则显示所有分支

选择想要操作的分支(即移动 head 指针)

git checkout [branch name]

分支和其所在路内容相关,新分支创建后提交,再切回老分支,新分支内容对老分支不可见

分支合并

git checkout [branch name]到主分支

git merge [branch name]次分支

git branch -d [branch name]删除分支

(切换分支前先 commit, 差点寄, git 很智能,会阻止不安全的分支切换)

//VERY USEFUL

如果原先分支有新内容提交,次分支直接合并,git 会自动提交一次,方便

相关文章
|
6天前
|
安全 开发工具 数据安全/隐私保护
《Git 简易速速上手小册》第8章:保护你的代码(2024 最新版)
《Git 简易速速上手小册》第8章:保护你的代码(2024 最新版)
32 1
|
6天前
|
开发工具 git 开发者
Git入门:轻松掌握版本控制的艺术
【5月更文挑战第13天】Git是流行的版本控制系统,适合各种规模的项目。本文引导读者入门Git,学习版本控制艺术。内容涵盖Git简介、安装配置、基础操作(如初始化、添加文件、提交、查看状态和历史)、分支管理、协作开发(克隆、推送、拉取)及高级用法,如标签管理、子模块和版本比较。遵循最佳实践,如频繁提交、有意义的提交信息和合理分支管理,可提升开发效率。
|
6天前
|
敏捷开发 测试技术 持续交付
云效产品使用常见问题之直接git clone 输入账密可以拉代码,但是云效平台上不行如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
6天前
|
开发工具 git
git 拉取代码仓库代码报错(合并错误 refusing to merge unrelated histories)
git 拉取代码仓库代码报错(合并错误 refusing to merge unrelated histories)
26 0
|
6天前
|
Shell 网络安全 开发工具
还不会 Git?最详细教你学会 Git + TortoiseGit 安装使用及提交代码!
还不会 Git?最详细教你学会 Git + TortoiseGit 安装使用及提交代码!
|
6天前
|
开发工具 git
对于github不同的分支main或者master,git拉取代码的时候怎么拉取不同分支的代码
对于github不同的分支main或者master,git拉取代码的时候怎么拉取不同分支的代码
24 1
|
6天前
|
开发工具 C语言 数据安全/隐私保护
git提交代码到远端仓库的方法详解
git提交代码到远端仓库的方法详解
|
6天前
|
程序员 开发工具 git
【程序员英语 代码提交】C++工程师的代码提交艺术:git commit 时 精确表达与最佳实践
【程序员英语 代码提交】C++工程师的代码提交艺术:git commit 时 精确表达与最佳实践
120 1
|
6天前
|
算法 开发工具 git
【git 实用指南】git 增加 本地代码 git add 相关命令和复杂情况需求
【git 实用指南】git 增加 本地代码 git add 相关命令和复杂情况需求
108 0
|
9月前
|
存储 缓存 运维
【运维知识高级篇】一篇文章带你搞懂Git!(Git安装+全局配置+Git初始化代码仓库+Git四大区域+Git四种状态+Git常用命令+Git分支+Git测试代码回滚)
【运维知识高级篇】一篇文章带你搞懂Git!(Git安装+全局配置+Git初始化代码仓库+Git四大区域+Git四种状态+Git常用命令+Git分支+Git测试代码回滚)
179 0

相关实验场景

更多