Git使用与踩坑丨学习记录

374 阅读7分钟

前言与说明:

鉴于本人比较愚蠢,每次使用Git都会遇到不少的问题,

又因为本人比较懒,不愿意每次都上网查资料来debug, 故开此记录文档来便于查阅。


0. debug记录

如果在git commit之后出现:

Please enter the commit message for your changes. Lines starting...

那是因为没写-m "xxxx",自动给跳转到VIM来让你手动输入参数了,

解决方法:

1. 按i或者insert键,进入"插入模式"
    
2. 修改最上面那行的黄色合并信息,也可以不改
    
3. 按下:wq+ENTER提交更新

所以还是推荐写上-m "xxxx"参数

现在对于神秘墙的测试情况是,当使用VPN时可以正常git push,目前没有bug


1. 版本控制

简而言之就是,在项目的版本迭代过程中,要保留老版本。

定义:版本控制(Revision Control)是一种在开发过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

本地版本控制 -> 集中版本控制(例如SVN,逻辑简单方便使用但是若服务器崩了就寄了) -> 分布式版本控制(例如Git,每个人都拥有全部的代码,可以离线地在本地提交,联网了再扔到服务器上)


2. Git的配置

Windows: 官网下载,速度慢就配镜像; Linux: apt -get install gitsudo apt install git

当需要卸载的时候,记得回去清一下环境变量,然后在控制面板卸载就可以了;

鉴于Git Bash是Linux风格的窗口,故下面贴一些常用且基本的Linux命令,以便查阅:

avatar

查看当前目录下的Git配置: git config -l

查看系统给我们自动配置的配置(什么话啊): git config --system --list

查看用户自己配的配置: git config --global --list 会出现user.name & user.email,这是必须要配置的

如何配置?很简单:

git config --global user.name "Conqueror712"

git config --global user.email 12345678@qq.com

如何删除?很简单,因为保存在本地了

Git\etc\gitconfig (安装目录) --system系统级

C:\Users\Administrator.gitconfig --global全局


3. Git基本理论(核心)

Git本地有三个工作区域:

  1. 工作目录(Working Directory):就是平时存放项目代码的地方
  2. 暂存区(Stage/Index):用于临时存放你的改动,事实上只是一个文件,保存即将提交到文件列表信息
  3. 资源库(Repository或Git Directory):安全存放数据的位置,这里有提交到所有版本的数据,HEAD指向最新放入仓库的版本 Git远程有一个工作区域:
  4. 远程Git仓库(Remote Directory):托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

一个重要的原理图:

avatar

在工作目录里面的隐藏的git文件夹里面有一个HEAD文件,里面大概是这样的内容: ref: refs/heads/master 这个master是主分支的意思 当然,现在版本(2020.10.01之后)大概是变成了/main 意思是一样的

Git的工作流程:

  1. 在工作目录中添加、修改文件 -> 有一个UserMapper.xml文件
  2. 将需要进行版本管理的文件放入暂存区域 -> git add .
  3. 将暂存区域的文件提交到Git仓库 -> git commit 因此,Git管理的文件有三种状态
  4. 已修改(modified)
  5. 已暂存(staged)
  6. 已提交(committed)

4. Git项目搭建

avatar

上面的部分和之前的一张图片有一点差别,暂时先不去管;

查看当前暂存区状态:git status

创建本地仓库的两种方式:

  1. 创建全新的仓库,需要用Git管理的项目的根目录执行 在当前目录新建一个Git代码库,在Git Bash中 git init 执行之后就可以看到多了一个.git目录

  2. 另一种方式是克隆远程目录 克隆一个项目和它的整个代码历史版本(版本信息) git clone [url]

创建仓库的时候,许可证推荐选择GPL-3.0,具体的细则可以点进去自己看。

SSH的获取ssh-keygen 如果需要加密算法那就是ssh-keygen -t rsa

在C盘的/user/administrator/.ssh/id_rsa.pub找到,复制之后扔到Github的对应位置

克隆远程仓库到本地,复制地址之后git clone [url]就好了


5. Git文件操作

文件的4种状态:

  1. Untracked:未跟踪,此文件在文件夹中,但并没有加入到Git库,不参与版本控制,通过git add状态变为Staged
  2. Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处:
    1. 如果它被修改,而变为Modified;
    2. 如果使用git rm移除版本库,则变为Untracked文件
  3. Modified:文件已修改,仅仅是修改,并没有进行其他的操作,这个文件也有两个去处:
    1. 通过git add可进入暂存Staged状态
    2. 使用git checkout则丢弃修改过,返回到Unmodify状态。git checkout即从库中取出文件,覆盖当前修改。
  4. Staged:暂存状态,执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态,执行git reset HEAD filename取消暂存,文件状态为Modified

查看文件状态:

  1. 查看指定文件状态git status [filename]
  2. 查看所有文件状态git status

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

git commit -m "我是信息我是信息" # 提交暂存区中的内容到本地仓库 -m的意思是提交信息

忽略文件: 有些时候我们并不想把所有的文件都纳入版本控制中,比如数据库文件、临时文件、设计文件等

应当在主目录下建立.gitignore文件,并且有以下规则:

  1. 忽略文件中的空行或以#开始的行将会被忽略
  2. 可以使用Linux通配符,这里不过多展开
  3. 如果名称的最前面有一个!表示例外规则,将不被忽略
  4. 如果名称的最前面是一个路径分隔符/,表示要忽略的文件在此目录下,而子目录中的文件不忽略
  5. 如果名称的最后面是一个路径分隔符/,表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)

.txt # 忽略所有.txt结尾的文件 !lib.txt # 但lib.txt除外 /temp # 仅忽略项目根目录下的TODO文件,不包括其他目录temp build/ # 忽略build/目录下的所有文件 doc/.txt # 会忽略doc/notes.txt但不包括doc/server/arch.txt


6. Git分支说明

Git分支中常用的命令:

列出所有本地分支git branch

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

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

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

合并指定分支到当前分支git merge [branch]

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

删除远程分支 git push origin --delete [branch-name]

git branch -dr [remote/branch]

特别的,如果多个分支并行执行,就会导致我们代码不冲突,也就是同时存在多个版本 这里暂时不特别管这部分...

7. 其他

Fork 与上游仓库同步

要将您的 Fork 与上游仓库同步,您需要执行以下步骤:

首先,将上游仓库的 URL 添加为远程仓库。在终端或命令行中,进入您的本地仓库并运行以下命令:

git remote add upstream <upstream_repository_url>

这将把上游仓库的 URL 添加为一个名为“upstream”的远程仓库。

接下来,获取上游仓库的更新。运行以下命令:

git fetch upstream

这将获取上游仓库的更新,但并不会自动将其合并到您的本地分支中。

现在,将您的本地分支切换到主分支(通常是 master)。运行以下命令:

git checkout master

接下来,将上游仓库的更改合并到您的本地分支中。运行以下命令:

git merge upstream/master

这将在您的本地分支中合并上游仓库的更改。

最后,将更新后的本地分支推送到您的 Fork 上。运行以下命令:

git push origin master

这将将更新后的本地分支推送到您的 Fork 上。


开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情