前言与说明:
鉴于本人比较愚蠢,每次使用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 git 或 sudo apt install git
当需要卸载的时候,记得回去清一下环境变量,然后在控制面板卸载就可以了;
鉴于Git Bash是Linux风格的窗口,故下面贴一些常用且基本的Linux命令,以便查阅:
查看当前目录下的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本地有三个工作区域:
- 工作目录(Working Directory):就是平时存放项目代码的地方
- 暂存区(Stage/Index):用于临时存放你的改动,事实上只是一个文件,保存即将提交到文件列表信息
- 资源库(Repository或Git Directory):安全存放数据的位置,这里有提交到所有版本的数据,HEAD指向最新放入仓库的版本 Git远程有一个工作区域:
- 远程Git仓库(Remote Directory):托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
一个重要的原理图:
在工作目录里面的隐藏的git文件夹里面有一个HEAD文件,里面大概是这样的内容: ref: refs/heads/master 这个master是主分支的意思 当然,现在版本(2020.10.01之后)大概是变成了/main 意思是一样的
Git的工作流程:
- 在工作目录中添加、修改文件 -> 有一个UserMapper.xml文件
- 将需要进行版本管理的文件放入暂存区域 ->
git add . - 将暂存区域的文件提交到Git仓库 ->
git commit因此,Git管理的文件有三种状态 - 已修改(modified)
- 已暂存(staged)
- 已提交(committed)
4. Git项目搭建
上面的部分和之前的一张图片有一点差别,暂时先不去管;
查看当前暂存区状态:git status
创建本地仓库的两种方式:
-
创建全新的仓库,需要用Git管理的项目的根目录执行 在当前目录新建一个Git代码库,在Git Bash中
git init执行之后就可以看到多了一个.git目录 -
另一种方式是克隆远程目录 克隆一个项目和它的整个代码历史版本(版本信息)
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种状态:
- Untracked:未跟踪,此文件在文件夹中,但并没有加入到Git库,不参与版本控制,通过
git add状态变为Staged - Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致。这种类型的文件有两种去处:
- 如果它被修改,而变为Modified;
- 如果使用
git rm移除版本库,则变为Untracked文件
- Modified:文件已修改,仅仅是修改,并没有进行其他的操作,这个文件也有两个去处:
- 通过
git add可进入暂存Staged状态 - 使用
git checkout则丢弃修改过,返回到Unmodify状态。git checkout即从库中取出文件,覆盖当前修改。
- 通过
- Staged:暂存状态,执行
git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态,执行git reset HEAD filename取消暂存,文件状态为Modified
查看文件状态:
- 查看指定文件状态
git status [filename] - 查看所有文件状态
git status
git add . # 添加所有文件到暂存区
git commit -m "我是信息我是信息" # 提交暂存区中的内容到本地仓库 -m的意思是提交信息
忽略文件: 有些时候我们并不想把所有的文件都纳入版本控制中,比如数据库文件、临时文件、设计文件等
应当在主目录下建立.gitignore文件,并且有以下规则:
- 忽略文件中的空行或以#开始的行将会被忽略
- 可以使用Linux通配符,这里不过多展开
- 如果名称的最前面有一个!表示例外规则,将不被忽略
- 如果名称的最前面是一个路径分隔符/,表示要忽略的文件在此目录下,而子目录中的文件不忽略
- 如果名称的最后面是一个路径分隔符/,表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)
.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 天,点击查看活动详情