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 会自动提交一次,方便

相关文章
|
2月前
|
Linux 开发工具 git
【Git】Git 完全指南:从入门到精通
Git 是一种强大的版本控制工具,掌握了其基本命令和高级特性后,可以大大提高开发效率并方便团队协作。通过本篇文章,你已经学会了 Git 的核心命令及其使用方法,希望你能够灵活运用 Git 在实际项目中进行版本管理。
256 4
|
1月前
|
Devops Shell 网络安全
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
84 16
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
|
6月前
|
IDE 网络安全 开发工具
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
|
6月前
|
开发工具 git Python
通过Python脚本git pull 自动重试拉取代码
通过Python脚本git pull 自动重试拉取代码
236 5
|
3月前
|
缓存 Java Shell
[Git]入门及其常用命令
本文介绍了 Git 的基本概念和常用命令,包括配置、分支管理、日志查看、版本回退等。特别讲解了如何部分拉取代码、暂存代码、删除日志等特殊需求的操作。通过实例和图解,帮助读者更好地理解和使用 Git。文章强调了 Git 的细节和注意事项,适合初学者和有一定基础的开发者参考。
75 1
[Git]入门及其常用命令
|
4月前
|
开发工具 git
git如何修改提交代码时的名字和邮箱?
git如何修改提交代码时的名字和邮箱?
567 4
|
4月前
|
Java Linux 开发工具
IDEA中git提交前如何关闭code analysis以及开启格式化代码
【10月更文挑战第12天】本文介绍了在 IntelliJ IDEA 中关闭代码分析和开启代码格式化的步骤。关闭代码分析可通过取消默认启用检查或针对特定规则进行调整实现,同时可通过设置 VCS 静默模式在提交时跳过检查。开启代码格式化则需在 `Settings` 中配置 `Code Style` 规则,并通过创建 Git 钩子实现提交前自动格式化。
1266 3
|
5月前
|
Shell 网络安全 开发工具
git与gitee结合使用,提交代码,文件到远程仓库
本文介绍了如何将Git与Gitee结合使用来提交代码文件到远程仓库。内容涵盖了Git的安装和环境变量配置、SSH公钥的生成和配置、在Gitee上创建仓库、设置Git的全局用户信息、初始化本地仓库、添加远程仓库地址、提交文件和推送到远程仓库的步骤。此外,还提供了如何克隆远程仓库到本地的命令。
git与gitee结合使用,提交代码,文件到远程仓库
|
4月前
|
JavaScript 前端开发 开发工具
一身反骨的我,用--no-verify绕开了git代码提交限制!
【10月更文挑战第7天】一身反骨的我,用--no-verify绕开了git代码提交限制!
264 0
|
6月前
|
Shell 开发工具 git
使用 Shell 代码简化 Git 步骤
【8月更文挑战第23天】本文介绍通过Shell脚本简化Git操作的方法:1) 使用`gitc &quot;提交信息&quot;`可一键完成代码提交与推送至远程仓库;2) 执行`gitpull`即可从远程仓库拉取最新代码并合并到当前分支;3) 输入`gitnewbranch 分支名称`快速创建并切换到新分支。将这些自定义函数加入`.bashrc`或`.zshrc`等配置文件后,即可随时调用简化版Git命令。
152 0

相关实验场景

更多