Git入门笔记

news/2024/7/7 7:40:43

文章目录

    • 0. Git原理简述
    • 1. 设置用户签名 `git config`
    • 2. 初始化本地库 `git init`
    • 3. 查看本地库状态 `git status`
    • 4. 本地文件添加到暂存区 `git add`
    • 5. 暂存区的文件提交到本地库 `git commit`
    • 6. 查看历史版本 `git reflog`
    • 7. 修改文件后提交到本地库
    • 8. 版本穿梭
    • 9. Git分支
      • 9.1 查看分支
      • 9.2 创建分支
      • 9.3 切换分支
      • 9.4 在分支上做修改
      • 9.5 合并分支
      • 9.6 合并产生冲突
      • 9.7 解决冲突
    • 10. 总结-下一步

说明:本文只专注于Git的常用操作,如果需要十分详细的内容,参考一些资料是必须的。

参考资料:

  1. 官网 https://git-scm.com/
  2. Pro Git https://git-scm.com/book/zh/v2
  3. 尚硅谷Git https://www.bilibili.com/video/BV1vy4y1s7k6?from=search&seid=16729592651686011517

0. Git原理简述

Git是一个版本控制系统。其实在写毕业论文的时候,认真的同学早就学会了版本控制(看下图)。可以查看历史版本的同时,版本切换也十分方便(真实)。

image-20210713112921183

但是这种方式比较憨。林纳斯,也就是Linux之父,手动版本控制了Linux代码十几年,把自己整累了,后面花了两个礼拜开发了分布式版本控制系统Git,中间有一段很长的故事就不在这里讲了。

下图为Git工作机制:

这个图还缺少最后一步:本地库文件再提交到远程库,如GitHub,码云等等。

1. 设置用户签名 git config

基本语法:

git config --global user.name 用户名
git config --global user.email 邮箱

设置完后可以在用户家目录查看

对于macOS用户,cd可以直接切换到家目录

macOS在该目录中,有.gitconfig文件,里面记录了用户的签名信息。

截屏2021-07-13 上午10.31.11

注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系

2. 初始化本地库 git init

基本语法:

git init

创建一个名称为git-space的文件夹进行演示。

假设有一个项目名称叫git-demo,你需要使用Git来托管这个项目,此时就需要本地库的初始化。

截屏2021-07-13 上午10.40.32

步骤为:进入到git-demo文件夹后,输入git init命令。可以看到本项目的本地库成功初始化。

截屏2021-07-13 上午10.43.59

因为我用的是oh-my-zshiTerm的搭配,所以终端看着比较赏心悦目。具体设置可以查看此教程 《iTerm2 + Oh My Zsh 打造舒适终端体验》。为了颜值折腾一阵子还是挺值的。

Windows用户可以用其他终端(如powershell)代替iTerm

查看初始化本地库后的所有文件:

截屏2021-07-13 上午10.58.06

可以看到文件夹里多了个.git的隐藏文件夹。

3. 查看本地库状态 git status

基本语法:

git status

git-demo文件夹中输入git status,可查看本地库状态。

image-20210713111021019

在文件夹中添加hello.txt文件,再次查看本地库状态。状态如下。

可以看到,有文件需要add,同时终端的master分支从绿色变成橙色(终端配置一下真的挺舒适的)。

4. 本地文件添加到暂存区 git add

基本语法:

git add 文件名

使用git add 文件名命令后,可以将文件添加到暂存区。查看状态得下图。

下图也展示了取消暂存的指令git -rm ...,暂存区文件被删除并不会影响本地文件。

5. 暂存区的文件提交到本地库 git commit

基本语法:

git commit -m "日志信息" 文件名

实际操作还未提交的变更,可以看到commit后工作区变干净了,master恢复到了绿色状态。同时提交时可以看到此次提交对应的版本号的前七位

6. 查看历史版本 git reflog

基本语法:

git reflog
或
git log

reflog查看的是精简后日志信息,带有7位版本号,而log查看的是完整的信息和完整的版本号。

输入git reflog得到下图,看到的是第一次提交的记录:

截屏2021-07-13 下午3.43.01

输入git log得到下图,内容更为详细:

截屏2021-07-13 下午3.43.58

7. 修改文件后提交到本地库

修改一下Hello.txt文件后输入git status,Git检测到了有文件被修改。需要重新add和commit。

具体输入的指令如下。可以看到Git是按行来维护文件的,一行新增一行删除代表了这个文件的代码修改了一行。

image-20210713155346638

查看日志,可以看到多了第二条提交记录,同时指针指向了最新的提交,说明本项目的内容版本对应的是第二次提交

查看文件内容:

8. 版本穿梭

比如写完了代码提交后,觉得这次写的还没之前好。这个情况,通过Git回退到之前的版本就行,不用自己手动修改回去。

基本语法:

git reset --hard 前7位版本号

步骤:

  1. 先查看日志,复制想回退到的版本的对应的前七位版本号。
  2. 输入上列指令,本项目便可回退为之前的版本。

大致的操作效果如下,回退到了第一行没有被修改的版本。

Git 切换版本,底层其实是移动的 HEAD 指针

9. Git分支

什么是分支?

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

**分支的好处:**同时并行推进多个功能开发,提高开发效率。各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

如上图所示,master为主分支,用于产品上线。hot-fix为快速修复bug的分支,feature-blue和feature-game是开发新特性的分支。这三条分支各自进行开发,相互之间不影响开发,也不影响主分支。

9.1 查看分支

基本语法:

git branch -v

可以看到现在只有一条分支。

9.2 创建分支

基本语法:

git branch 分支名

举例子:我们创建一个hot-fix分支。

git branch hot-fix

创建后查看分支,可以看到多了一条hot-fix。

9.3 切换分支

基本语法:

git checkout 分支名

举例子,咱们切换到hot-fix分支:

git checkout hot-fix

可以看到分支被成功切换。

9.4 在分支上做修改

举例子,咱们在hot-fix分支上对项目做快速修复。和在master分支上修改是一样的步骤。

修改后,add然后commit即可。

查看日志后,可以看到指针的切换都有被详细记录。

9.5 合并分支

基本语法:

git merge 分支名

把指定的分支合并到当前分支上。

举例:将hot-fix上的修改合并到master

9.6 合并产生冲突

合并产生冲突在企业里是常见的情况。

冲突产生原因:

合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。

举例子:

我们在master中的hello.txt文件第一行添加信息后并提交到本地库:

同时修改hot-fix分支上hello.txt文件上的第一行,为创造冲突做准备。同时记得切换回到master分支。

master分支下合并hot-fix分支,发现有合并冲突。说明还未合并成功,需要手动合并代码,而且冲突的地方都有标明清楚。

9.7 解决冲突

解决冲突的方法很简单,删除特殊的符号,并决定要使用的内容。

特殊符号 <<<<<<< HEAD
当前分支的代码 =======
合并过来的代码 >>>>>>> hot-fix

hello.txt部分内容:

<<<<<<< HEAD
hello git! mater test~
=======
hello git! hot-fix test
>>>>>>> hot-fix
hello git! hot-fix!!!
hello git!
hello git!
hello git!

举例子:看了下代码,觉得两个分支写的代码都挺好,所以选择都留下。修改后的hello.txt内容如下:

hello git! mater test~
hello git! hot-fix test
hello git! hot-fix!!!
hello git!
hello git!
hello git!

修改后重新add和commit,成功解决冲突(注意:此时使用 git commit 命令时不能带文件名)。

10. 总结-下一步

Git的基本操作已经学习完了,后面需要学习Git在团队内的协作机制和跨团队的协作办法。下一步,需要熟悉GitHub的使用。


http://www.niftyadmin.cn/n/2436243.html

相关文章

创建帧动画

Photoshop制作会跳动的文字动画效果和流动效果 --之心 新建一个大小适当文档&#xff0c;选择椭圆工具&#xff0c;按住Shift拉出一个正圆&#xff0c;然后锁定图层。选择渐变工具&#xff0c;将前景色与背景色分别设置为白色和任意深色。如下图中直线方向从上至下拖曳。得到小…

macOS IDEA等jetbrain全家桶,Clear Read-Only Status解决方法

问题 在编写代码的时候&#xff0c;代码因为只读而不让修改&#xff0c;并且跳出clear read-only status窗口。 主要原因在于&#xff0c;现在的macOS的权限设置导致编辑器没有权限修改代码。 解决办法 放开文件的写权限即可。 终端cd到项目的根目录后执行以下代码&#x…

imx6 关闭调试串口

需要关闭imx6调试串口&#xff0c;用作普通的串口使用。 参考链接 http://blog.csdn.net/neiloid/article/details/7585876 http://www.cnblogs.com/helloworldtoyou/p/5437867.html 更改kernel中配置&#xff0c; make menuconfig Symbol: SERIAL_IMX_CONSOLE [y] …

TypeScript语法错误:Argument of type ‘string‘ is not assignable to parameter of type ‘Element‘. 解决方法

问题描述 DOM插入元素节点报错。 TypeScript语法错误&#xff1a; TS2345: Argument of type ‘string’ is not assignable to parameter of type ‘Element’. 类型"string"的参数不能赋给类型"Element"的参数。 报错内容以及对应代码&#xff1a; 解决…

java substring

str&#xff1d;str.substring(int beginIndex&#xff0c;int endIndex);中最终得到的值: beginIndex < str的值 < endIndex 程序猿必读转载于:https://www.cnblogs.com/longzhongren/p/6214897.html

用TypeScript写贪吃蛇(1):开发环境搭建

0. 参考资料 尚硅谷2021版TypeScript教程: https://www.bilibili.com/video/BV1Xy4y1v7S2?p22 TypeScript官方文档&#xff1a;https://www.tslang.cn/docs/home.html webpack官方文档&#xff1a;https://webpack.docschina.org/concepts/ Babel官方文档&#xff1a;http…

easyUi datagrid 返回时间格式化操作

1.格式化返回的时间 {   field : endTime,   title : 轮播图片循环的结束时间,   width : 50,   align : center //格式化时间操作 formatter:function(value,row,index){ var unixTimestamp new Date(value); return unixTimestamp.toLocaleString(); } 2.方法二…

用TypeScript写贪吃蛇(2):HTML和Less代码书写

1. 目标效果 书写前端项目的基本原则是&#xff0c;先完成静态页面代码后&#xff08;HTML和Less&#xff09;再完成动态代码&#xff08;TypeScript&#xff09;。 目标效果图如下&#xff0c;大小和颜色等都有标注。 下文的代码就不再详述&#xff0c;因为注释特别详细。 …