Git使用记录(本地库与GitHub串讲)

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管理自己的项目—真实开发环境的策略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值