Git起源与简介
在2005年由Linux之父Linus使用C语言开发,目的是为了很好的管理Linux内核的源代码,之后,Git日臻成熟完善,得到了广泛的应用。
Git具有以下优势:
- 直接记录快照,而非差异比较;
- 几乎所有操作都是本地执行;
- Git 保证数据完整性;
- Git 一般只添加数据;
Git文件
Git文件有三种状态:
- 已提交(committed)保存至本地数据库
- 已修改(modified)修改了文件,但仍未保存到数据库
- 已暂存(staged)对一个已经修改的文件做了标记,包含在下次提交的快照中
对应的三种状态,Git有三种工作区域:
- Git仓库:保存项目元数据和对象数据库的地方
- 工作目录:对项目的某个版本独立提取出来的内容
- 暂存区域:保存了下次将提交的文件列表信息
下载安装Git
下载链接
此处说明图片将借用该文的图片方便说明,只需要对关键步骤说明,无显示图片则默认跳过即可
初次安装完成后,设置用户名和邮箱
git config --global user.name "<Git用户名>"
git config --global user.email <Git用户邮箱>
//实际输入邮箱时把左右<>去掉,只输入邮箱名即可
获取Git仓库
1.在现有目录下初始化一个新的本地仓库
在git Bash中进入工作目录或者直接在工作目录右击,选择git Bash here
使用命令行初始化仓库:
git init
本地仓库初始化成功后,Git会在当前目录新建一个.git的隐藏文件夹,该文件夹中包含了初始化的Git仓库中所有的必须文件
2.克隆现有的仓库到本地
git clone <url>
如果想在克隆的时候自定义仓库的名字,格式如下:
git clone <url> <new repository name>
查看文件当前状态:
git status
跟踪新文件:
git add <文件名或者目录>
文件名支持通配符(比如
.c表示工作区所有c文件);
如果是目录,则递归跟踪该目录下所有文件;
使用-A参数表示跟踪所有文件:
提交更新:将暂存区的内容提交到仓库,需要提前使用git status查看,确认改变已经暂存,会自动调用vim编辑信息,保存即可提交
git commit
提交信息较简单,一行直接提交
git commit -m "<提交信息>"
跳过暂存直接提交更新
git commit -a -m "<提交信息>"
不需要进入git的文件,在工作目录下创建一个.gitignore的文件列出忽略文件的模式,文件.gitignore的格式规范如下:
所有空行或者以#开头的行会被Git忽略;
可以使用标准的glob模式匹配;
匹配模式可以以(/)开头防止递归;
匹配模式可以以(/)结尾指定目录;
要忽略指定模式以外的文件或目录,可以在模式前加(!)表示取反;
移除文件:
从暂存删除,并且从工作目录删除源文件:
git rm <文件名>
从暂存区删除,保留工作区的源文件:
git rm --cached <文件名>
reset的三个参数区别
-
-soft 仅仅移动本地库HEAD指针
-
-mixed 移动本地库HEAD指针,重置暂存区
-
-hard 移动本地库HEAD指针,重置暂存区,重置工作区
本地库操作
查看提交历史:
git log
该命令默认会按照提交时间列出所有提交(最新一次提交在最上面),并且列出四个基本提交信息:
提交的SHA-1校验和;
提交的作者信息;
提交时间;
提交说明;
常用的显示包括
git log --pretty=oneline
版本回退/前进
git reset --hard <索引值>
eg:git reset --hard b9a33ff
创建分支:
git branch <分支名称>
查看分支:
git branch -v
切换分支:
git checkout <分支名>
合并分支:
1.切换到要合并的分支上
2.执行命令
git merge <待合并的分支名称>
合并冲突:
在不同的分支上修改了同一文件的同一个地方的内容,两者同时合并到主分支时会产生冲突,提示合并失败,进入手动合并模式
git自动进入手动模式后,命令行会显示MERGING字样
1.手动修改文件,并删除git添加的多余符号
2 添加修改到暂存区 git add <文件名>
3 提交更新 git commit -m <提交信息>
本地删除分支
如果你还在一个分支上,那么 Git 是不允许你删除这个分支的。所以,请记得退出分支:git checkout master
。
通过 git branch -d 删除一个分支,比如:git branch -d fix/authentication
。
当一个分支被推送并合并到远程分支后,-d 才会本地删除该分支。如果一个分支还没有被推送或者合并,那么可以使用-D强制删除它。
这就是本地删除分支的方法。
结合github进行操作
1.创建空的本地库
git init
2.在github创建一个新库
注册完成后,右上角加号,填写相关信息即可创建,然后点击绿色code按钮,复制其中https下的URL
3.Git与Github建立连接
首先在Git中为自己的库建立别名,便于之后使用
git remote add <别名> <远程库地址>
查看所有远程库信息
git remote -v
后边括号写fetch的是拉取地址,写push的是推送地址
可以使用如下命令确认连接状态,出现hello,即为配置成功
ssh -T git@github.com
拉取操作(远程库到本地):
注意远程库创建时如果创建了README文件,必须先进行拉取
git pull <远程库地址名> <远程分支名> //远程分支名有的是master 有的是main,注意自己的是什么
如果是第一次的话,会提示确认连接,点击选择浏览器打开或输入密码确认即可
推送操作(本地库到远程库):
git push <远程库/别名> <要推送信息的分支>
此步可以做一个小测试:
首先 创建一个C文件
vim test.c
在其中写一小段c程序
#include<stdio.h>
int main(void)
{
printf("Hello World.\n");
return 0;
}
保存退出后
git add test.c
git commit -m "添加test.c文件"
git push origin main
此时可以在github中看到更新
4 克隆(拉取)
git clone <远程库url>
克隆的效果有(重点):
将远程仓库的所有内容克隆到本地(避免了拉取操作);
默认创建了origin作为远程仓库地址的别名(避免了取别名的操作);
初始化了本地库(避免了初始化操作)
克隆完成后可以直接进行拉取和推送
5.远程删除分支
使用这个命令可以远程删除分支:git push <remote> --delete <branch>
。
比如: git push origin --delete fix/authentication
,这个分支就被远程删除了。
你也可以使用这行简短的命令来远程删除分支:git push <remote> :<branch>
,比如:git push origin :fix/authentication
。
如果你得到以下错误消息,可能是因为其他人已经删除了这个分支。
error: unable to push to unqualified destination: remoteBranchName The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref. error: failed to push some refs to ‘git@repository_name’
使用以下命令同步分支列表:
git fetch -p
-p 的意思是“精简”。这样,你的分支列表里就不会显示已远程被删除的分支了。
多协作者使用
新的成员没有权限去提交修改仓库,因此需要创建者在settings中,找到collaborators邀请团队成员。
此处注意,协作工作时
1.一个人推送更新后,其他人要先拉取更新,之后才能推送
2.拉取更新后,如果修改和本地修改地方相同,则会合并失败,进入手动合并
团队之外的开发者想要对项目贡献代码,需要进行如下操作:
- 开发者Fork一份远程仓库到自己的仓库中
- 在自己的仓库进行修改,提交更新
- 更新完毕提交pr(pull request)
- 项目拥有者审核代码
- 项目拥有者合并代码
git clone后,获取指定远程分支
git fetch
git checkout -b feature origin/feature // 把feature弄下来 本地feature对应远程feature
远程别人建了分支,本地怎么切换:
git fetch
git checkout -b feature origin/feature
别人建的分支你看不到,想要拉到本地:
git branch -a // 查看所有分支:本地分支和远程分支
1. 刷新远程分支的命令行:git remote update origin -p
2. 获取远程分支,需要切换:git fetch origin branch_name
3. 指定远程分支,便于git pull git push ,使用 git branch --set-upstream-to=origin/<branch>
关于分支
查看远程分支: git branch -a
查看本地分支:git branch
创建分支:git branch <name> // <name>是分支名
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name> // 把其他分支合并到master后,还要git push
删除本地分支:git branch -d <name>
远程分支重命名 (已经推送远程-假设本地分支和远程对应分支名称相同)
a. 重命名远程分支对应的本地分支
git branch -m oldName newName
b. 删除远程分支
git push --delete origin oldName
c. 上传新命名的本地分支
git push origin newName
d.把修改后的本地分支与远程分支关联
git branch --set-upstream-to origin/newName
使用vscode进行Git可视化操作
1.使用VS Code进行Git可视化操作
VS Code内置了对Git的支持,可以使用图形化界面方便的进行版本控制,比如暂存,提交更新,推送,拉取这些常规操作,特别在比较文件差异方面有着得天独厚的优势,但是前提是:
1)已经安装了VScode并且了解其使用
2)电脑上必须安装了Git并且你了解Git的常用命令行操作
2.设置git.path
1)使用ctrl+shift+p,打开命令面板,输入setting,选择首选项:打开设置(json)
2)在其中添加git.path,目录为电脑上的git.exe所在目录
3)保存,重新用VScode打开Git存储库
3.本地库操作
3.1修改文件
修改后可以自动显示出更改,后边出现U的标识
3.2暂存修改
在命令行中输入git add <文件名>或者点击更改行+号
3.3提交更新到本地库
输入命令git commit -m <提交信息> 或者点击源代码管理边上的对勾进行提交,弹出对话框输入提交信息即可
3.4安装git-extension-pack扩展,支持更多功能
查看提交历史
查看内容状态
查看仓库状态
查看文件差异
切换分支,查看差异并合并
4 远程库操作
4.1 github上新建远程库
4.2 添加远程库
打开命令面板,输入git add,选择添加远程库,填写远程库别名,填写地址
4.3 推送内容 点击右侧三个点选择
5.在vs中每次更新代码都会要输入账号密码,方便起见,可以配置一下让GIT记住密码账号。
git config --global credential.helper store //在Git Bash输入这个命令就可以了
6.第一次拉取分支git pull失败
拉取分支上代码的时候出现了一个问题,git pull失败,提示:fatal:refusing to merge unrelated histories
这个问题是因为两个不相干的git库,一个本地库,一个远端库,本地要推送到远端,远端觉得这个库和自己不相干,所以告知无法合并。
末尾加上–allow-unrelated-histories,相当于说强行合并
git pull origin master --allow-unrelated-histories
7.vscode提交到github出错
报错:fatal:unable to access “github.com” OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
git config --global --unset http.proxy
工程化使用git
以下内容觉得有玩家已经写的很好了,就直接附在本处供大家一起学习
使用git和github管理自己的项目—真实开发环境的策略