Git学习笔记

本文详细介绍了Git的基本理论、安装与环境配置、常用Linux命令、配置、分支管理、远程仓库设置、IDEA集成等内容,旨在帮助读者全面理解和掌握Git版本控制系统。
摘要由CSDN通过智能技术生成

Git学习笔记

1、版本控制分类

  1. 本地版本控制

  2. 集中版本控制 SVN (Subversion)

    ​ 所有的版本数据都保存在服务器上,每个人工作时从中央服务器下载代码,必须联网才能工作,个人修改后提交到版本库。

    ​ 如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据。

  3. 分布式版本控制 Git

    ​ 每个人都拥有全部的代码,所有版本信息仓库全部同步到本地的每个用户。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据。

2、Git安装和环境配置

软件下载

Git下载地址

Git启动选项

安装成功后在开始菜单中会有Git项,任意文件夹下右键也可以看到对应的程序

image-20240118225850910

**Git Bash:**Unix与Linux风格的命令行,使用最多,推荐最多

**Git CMD:**Windows风格的命令行

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

用户目录

C:\Users\MyUserName

# gitbash 用户目录标识符  ~
MyUserName@xxxx MINGW64 ~
$ pwd
/c/Users/MyUserName

根目录

根目录为git安装目录

# 根目录标识符  /
MyUserName@xxxx MINGW64 /

3、常用Linux命令

  1. cd : 改变目录。
  2. cd . . 回退到上一个目录,直接cd进入默认目录
  3. pwd : 显示当前所在的目录路径。
  4. ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。
  5. touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。
  6. rm: 删除一个文件, rm index.js 就会把index.js文件删除。
  7. mkdir: 新建一个目录,就是新建一个文件夹。
  8. rm -r : 删除一个文件夹, rm -r src 删除src目录
    rm -rf / 切勿在Linux中尝试!删除电脑中全部文件!
  9. mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。
  10. reset 重新初始化终端/清屏。
  11. clear 清屏。
  12. history 查看命令历史。
  13. help 帮助。
  14. exit 退出。
  15. #表示注释

4、Git的必要配置

所有配置文件都保存在本地

# 查看Git所有配置 l: list
$ git config -l
# 查看Git系统配置
$ git config --system --list
# 查看Git用户(global)配置
$ git config --global --list
# 查看Git局部(Local)配置
$ git config --local --list

Git用户配置文件的保存位置:

  1. system 系统级配置:Git 安装目录下Git\etc\gitconfig
  2. global 全局配置:用户目录下C:\Users\MyUserName\ .gitconfig
  3. Local 局部配置:工作空间目录下**.git/config**

优先级:Local > global >System

4.1 设置用户名和邮箱(用户的标识)(重要!!!必须配置)

每次提交都会使用用户的信息,可以直接编辑配置文件,通过命令设置后会响应到这里

如果用了 –global 选项,那么更改的配置文件就是全局配置。如果要在某个特定的项目中使用其他名字,只要去掉 --global 选项重新配置即可。

git config --global user.name "kuangshen"  #名称
git config --global user.email 24736743@qq.com   #邮箱

4.2 为常用命令设置别名(可选)

  1. 打开用户目录C:\Users\MyUserName,创建.bashrc文件

  2. .bashrc文件中配置

    # 等号前后不能有空格
    # 用于输出git日志
    alias git-log="git log --all --pretty=oneline --abbrev-commit --graph"
    # 用于输出文件目录下所有文件信息
    alias ll="ls -al"
    
  3. 打开gitBash

    执行source ~/.bashrc

5、Git基本理论

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上**远程的git仓库(Remote Directory)**就可以分为四个工作区域。

image-20240118230622182

  • **版本库:**工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

  • Workspace 工作区:电脑里能看到的目录,存放项目代码的地方。

  • Index / Stage 暂存区:用于临时存放你的改动,保存即将提交到文件列表信息。存放在 .git 目录下的 index文件 **(.git/index)**中,所以我们把暂存区有时也叫作索引(index)

  • Repository 仓库区:安全存放数据的位置,这里面有你提交到所有版本的数据。

    其中HEAD指向当前版本分支(Master)

  • Remote 远程仓库:托管代码的服务器。

  • Stash 隐藏:是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

    image-20240118230843013

6、Git项目创建

image-20240118230815086

  1. 创建全新的本地仓库

    # 在当前目录新建一个Git代码库
    # 执行后在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面
    # 需要手动配置远端仓库的关联关系
    $ git init
    
  2. 克隆远程仓库

    # 将远程服务器上的仓库完全镜像一份至本地,克隆一个项目和它的整个代码历史(版本信息)
    $ git clone [url]
    

7、Git的文件操作

7.1 文件的四种状态

image-20240118230946354

  • Untracked: 未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制。通过git add 状态变为Staged。
  • Staged: 暂存状态。执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态。
  • Unmodify: 文件已入库,如果它被修改,而变为Modified。
  • Modified / Unstaged: 文件被修改。 通过git add可进入暂存staged状态。

7.2 文件操作

# 查看指定文件状态
$ git status [filename]

# 查看所有文件状态
$ git status

# 查看提交记录
# git log [option]
# 	--all 显示所有分支
# 	--pretty=oneline 将提交信息显示为一行
# 	--abbrev-commit 缩短Commit ID的显示
# 	--graph 以图形的形式显示
$ git log
$ git log --all --pretty=oneline --abbrev-commit --graph
# 注:如果显示内容过长,git会分页显示,使用上下进行翻译,结尾有(END)标识,按q键退出

# 添加所有文件到暂存区
$ git add .

# 提交暂存区中的内容到本地仓库 -m "提交信息"
$ git commit -m "消息内容"    

7.3 文件版本的回退

# 回退到指定版本 (commitID通过 git log 或者 git reflog 查看)
$ git reset --hard commitID

# 查看已经删除的记录
$ git reflog

7.4 设置忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立 “.gitignore” 文件。

  1. (#)为注释。

  2. 使用Linux通配符。

    • 星号(*)代表任意多个字符

    • 问号(?)代表一个字符

    • 方括号([abc])代表可选字符范围

    • 大括号({string1,string2,…})代表可选的字符串等。

  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。

  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。

  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下所有文件。

#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

7.5 Git tag

如果达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。

# Tag的名称(tag名称不能带有空格)
# -a 选项意为"创建一个带注解的标签不带-a的话无法注解信息 / -m 指定Tag信息
$ git tag -a [tagname] -m "Tag note"

# 查看所有的tag
$ git tag

image-20240118152138575

8、GIT分支

HEAD指向的为当前分支地址

8.1 分支在开发中使用的流程

  • master分支:线上分支,主分支

  • develop分支:开发分支,在此分支上开发需求,开发完成后合并到主分支上。

  • feature/xxxx分支:从develop上创建的分支,分支上研发任务完成后合并到develop分支。

  • hotfix/xxxx分支:从master上创建的分支,一般作为线上bug修复使用,修复完成后合并到master、develop等分支上。

  • 其它分支:test分支用于代码测试、pre分支用于预上线等。

  • 一般情况下合并后会删除hotfix、feature分支,保留master和develop分支

    image-20240117194537884

8.2 Git分支常用操作

  1. 当前分支为dev01,master分支和dev01分支相同

    image-20240117172642200

  2. 当前分支为dev01,dev01完成一次提交,master分支在上一个版本

    image-20240117172750726

  3. 切换分支为master,HEAD从新指向Master

    image-20240117173152006

  4. 在Master上添加修改,直观显示

    image-20240117174311714

  5. 在Master分支上合并Dev01分支,注意合并时会进入Vim编辑器,按ESC进入命令模式输入:wq推出

    image-20240117175240507

  6. 注意:合并后删除分支git branch -d 分支名

8.3 解决分支冲突

假设现在存在两个分支,master分支和dev01分支,存在文件demo.txt

  • 如果dev01分支修改demo.txt文件,mater分支未修改,则master合并dev01分支时不会产生冲突,dev01分支的修改会覆盖master的demo.txt文件
  • 如果dev01分支修改demo.txt文件,同时mater分支也修改了demo.txt文件,则产生冲突,需要确认冲突,再通过git add . git commit重新提交,即可完成合并。

结论:git bash中冲突检查是按照文件进行检查,即不会检查文件内的具体变化,只会判断文件是否在不同分支进行过修改。不同分支修改同一个文件就会产生冲突。

  1. master分支上,demo01.txt文件内容为Update count = 1,当前分支dev02,修改文件为Update count = 2

    image-20240118232522613

  2. master分支上修改demo01.txt内容为Update Count = 3

    image-20240118232716005

  3. master上合并分支后显示冲突

    image-20240118232754678

  4. 文件显示结果

    image-20240118232859480

  5. 需要手工修改结果,这里我们修改为10

    image-20240118232937617

  6. 完成修改后重新commit提交会自动合并结果

    image-20240118233135912

    image-20240118233214857

8.4 分支常用命令

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]

# 切换分支
$ git checkout [branch]

# 新建一个分支,并切换到该分支(-b 新建)
$ git checkout -b [branch]

# 合并指定分支到当前分支(重要)
$ git merge [branch]

# 删除分支(不能删除当前分支,只能删除其它分支)(-d 删除分支需要做检查)
# 强制删除用于删除未合并分支的场景
$ git branch -d [branch-name]
(-D 不做任何检查,强制删除,未merge分支时)
$ git branch -D [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

9、远程仓库的设置与使用

9.1 配置远程仓库SSH公钥

设置本机绑定SSH公钥,实现免密码登录。

使用仓库URL时,复制SSH链接才能实现免密登录

  1. SSH公钥生成
# 进入 C:\Users\Administrator\.ssh 目录
# 通过命令 ssh-keygen 生成 SSH Key:
# ssh-keygen -t rsa -C "Gitee SSH Key"
#     -t key 类型
#     -C 注释
$ ssh-keygen -t rsa

# Gitee验证配置是否成功
$ ssh -T git@gitee.com
  1. 查看生成的 SSH 公钥和私钥
    私钥文件 id_rsa232
    公钥文件 id_rsa232.pub

  2. 记事本打开id_rsa232.pub复制公钥

  3. 在github或gitee的设置中–>SSH公钥–>添加复制的公钥

9.2 远程仓库添加/查看/推送/clone

# 添加一个远程仓库,起名为orgin。 git remote add <远端名称> <仓库路径>
$ git remote add origin [url]

# 查看远端仓库
$ git remote

# 推送代码到远端仓库
# git push [-f] --set-upstream [远端名称[本地分支名]:[远端分支名]]
# -f 强制推送
# --set-upstream 推送到远端时建立本地分支和远端分支的关联关系,下次推送默认使用该关系
$ git push orgin master
$ git push origin master:master
$ git push # 按照分支的关联关系推送

# 查看本地分支与远程分支的关联关系
$ git branch -vv

# 从远端仓库克隆
$ git clone [url]

9.3远程仓库抓取/拉取

  • 抓取:

    • 将远端仓库里的更新都抓取到本地,不进行合并

    • 如果不指定远端名称和分支名,则抓取所有分支

# 抓取命令:git fetch [remote name] [brance name]
$ git fetch

# master分支上合并远端分支
$ git merge origin/master
  • 拉取:

    • 将远端仓库里的修改拉到本地并自动合并,等同于 fetch+merge

    • 如果不指定远端名称和分支名,则拉取所有并更新当前分支

# 拉取命令:git pull [remote name] [brance name]
$ git pull

9.4 解决合并冲突

远端分支也是分支,所有合并冲突的解决方式也和本地分支冲突一样。

建议提交之前先pull在本地解决完冲突再提交

  1. 先拉取远程仓库的提交,经过合并后再推送到远端分支

10、IDEA中集成Git

  1. IDEA中设置git路径

    image-20240118110751422

  2. 在工程项目中创建.git文件,注意要关联与远端仓库的关系

    • 方法一:在项目导航栏VCS标签中启用版本控制

      image-20240118110930685

    • 方法二:在.git目录下创建项目

    • 方法三:复制.git文件到项目工程文件中

操作注意点

  1. IDEA中对index缓冲区较为弱化,直接进行commit提交
  2. 切换分支前先提交本地的修改
  3. 提交之前先pull在本地解决完冲突再提交
  4. 冲突检查会对比文件内修改的代码行

11、参考资料

  1. 【狂神说Java】Git最新教程通俗易懂视频同步笔记:狂神聊Git

  2. 黑马程序员Git全套教程,完整的git项目管理工具教程,一套精通git

  3. Git 教程 | 菜鸟教程 (runoob.com)

  • 23
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值