主体内容来自B站UP主冯雨的视频教程,此为个人笔记分享,同时涉及对原视频的一些补充。原视频链接
语雀笔记链接
介绍
Git和GitHub是什么
Git是一个运行在电脑上的版本控制软件,GitHub是基于Git打造的网站。
Git的三个概念:提交commit、仓库repository、分支branch
安装
Git
vscode
一些GitHub上搜索的关键词
- 找百科大全:awesome xxx
- 找示例:xxx sample
- 找项目框架:xxx starter、xxx boilerplate
- 找教程:xxx tutorial
Git操作及VSCODE图形化操作
- VSCODE需要安装拓展GitLens后可以使用图形界面管理Git仓库。
- 在VSCODE中,使用查看→终端可以使用集成在其中的终端界面,可以起到替代Git Bash的作用,不用再打开新的终端窗口。
- 在VSCODE的源代码管理栏进行Git相关的操作。
下载仓库
git clone <repository url>
使用git clone
与网页选择下载.zip压缩文件相比,多出了名为./.git/
的隐藏文件夹。因为压缩文件解压后得到的是项目代码,而使用git clone
得到的是克隆到本地的仓库。
初始化仓库
GitBash命令行
git init
在项目文件夹下打开Git Bash,输入git init
初始化仓库,初始化为仓库后可以通过提交等操作进行代码版本控制。
仓库文件夹下会生成./.git/
文件夹,用于保存仓库信息和提交历史信息,删除会导致git及仓库相关的信息丢失。
VSCODE - 源代码管理
可以一键初始化仓库。
会自动将当前仓库的文件与现有文件进行比较,绿色的U表示新增的文件,黄色的M表示修改过的文件。
设定使用git的身份
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
指令中去除--global
选项为仅在当前项目使用该身份。
提交
流程示意如下
GitBash命令行
将文件加入暂存区
git add -A
git add <filename>
-A 表示将所有的文件都加入暂存区。
将暂存区文件提交到仓库
git commit -m "提交信息"
提交信息中进行对本次提交的简单说明。
VSCODE - 源代码管理
-
更改栏下表示工作区里相对仓库新进行的更改。
- 点击文件旁的’+‘将文件添加到暂存区(=
git add <filename>
)。
- 点击更改栏目旁的’+‘将所有存在更改的文件添加到暂存区(=
git add -A
)。
-
暂存的更改栏目下表示已经由工作区提交到暂存区的更改。
- 在源代码管理下的消息位置输入本次提交信息,点击提交(Ctrl+Enter) 完成提交。
查看提交历史
GitBash命令行
查看仓库提交历史
git log --start
使用--start
可以看到较为详细的信息。
可以看到每次commit的Hash值,使用哈希值可以用于索引表示本次提交。
VSCODE - 源代码管理
在COMMITS栏目中可以查看提交历史,可以点击文件查看更改信息。
项目的维护日常(版本回滚)
GitBash命令行
工作区内容回滚到上一次提交状态
git checkout <filename>
checkout
的主要功能就是迁出一个分支的特定版本,默认是迁出分支的HEAD版本。
如下为一些使用示例:
git checkout master
# 取出master版本的head。
git checkout <tag_name>
# 在当前分支上取出<tag_name>的版本
git checkout master <filename>
# 放弃当前对文件file_name的修改
git checkout <commit_id> <filename>
# 取文件<filename>在<commit_id>次提交的内容。<commit_id>为git commit时的哈希值。
撤回提交
git reset HEAD^1
- HEAD是本次需要回滚的状态,^1表示上一个状态,1为缺省值。
- 提交历史中会消除记录。
- 提交状态会退回到上次提交前,但文件仍然是更改后的,即此时HEAD指向暂存区,可以继续修改,若要恢复更改仍然需要进行
checkout
。
reset命令
git reset [--soft | --mixed | --hard] [HEAD]
-
--mixed
为缺省,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
-
--soft
只进行对操作的回退,不影响工作区的文件。可以使用哈希值指代提交,或者使用HEAD指针指代相对状态。
-
--hard
回退作用与--soft
类似,但是会改变工作区文件。
关于HEAD的一些说明
- HEAD是一个指针,指示了文件管理的状态,会随着
add
与commit
指令在暂存区和提交区之间来回移动,不会指向工作区。
- HEAD表示了指向位置的文件管理状态,回滚到HEAD则是将当前的工作状态重置到与HEAD指向位置相同的状态。
- 一次提交(commit)之后,HEAD指向当前的提交区,HEAD则指向的是提交前的暂存区。如果reset到HEAD则会回到上一次提交前,处于暂存区的状态。此时即在工作区更改完成,提交到了暂存区,还未提交的状态。
- 同理一次add操作后,HEAD指向的是当前的暂存区,HEAD指向提交区。如果reset到HEAD则会回到上一次提交后的状态。此时即刚刚完成上一次提交的状态,暂存区没有文件。
指代位置 |
表示方式1 |
表示方式2 |
当前位置 |
HEAD |
HEAD~0 |
上一个位置 |
HEAD1/HEAD
|
HEAD~1 |
上上一个位置 |
HEAD2/HEAD^ |
HEAD~2 |
… |
… |
… |
VSCODE - 源代码管理
- 在更改中点击放弃更改的箭头按钮即可将工作区的更改恢复到上次提交状态。
- 在COMMITS栏目中选中需要撤回的提交,点击右键→Undo Commit完成提交的撤回,更改后的文件仍在暂存区,点击暂存区文件旁的’-‘将文件从暂存区移到更改区。
- 在FILE HISTORY栏目下可以查看与当前文件相关的提交历史和改动位置情况,需要跨多个版本的回滚和更改时建议不删除提交,只用原版本的文件内容替换当前工作区内容,此时不会删除之前的提交历史,仍然可以回滚维护,使得文件版本更加稳定可控。
分支
在VSCODE命令终端中进行
从当前节点新建分支
git checkout -b <branchname>
新建分支的同时切换到新建分支。
列举所有分支
git branch
切换到某个分支
git checkout <branchname>
合并分支
git merge <branchname>
- 先切换到master分支,再使用该命令,将
<branchname>
分支的更改合并到master分支中。
- 文件会出现在合并更改栏目中,与更改栏目等类似地提交到暂存区和最终提交。
- 分支中更新的内容会进行更新替换,在不同分支中都进了更改的内容会高亮提示需要人为选择与修改。可以在合并更改栏目中右键待合并的文件选择全部采用当前内容或全部采用传入版本。
- Accept Current Change - 保留合并前的内容
- Accept Incoming Change - 保留待合并分支的内容
- Accept Both Changes - 全部保留
终止当前合并操作
git merge --abort
如果出现冲突需要等待合作商讨解决,可以使用该命令终止当前合并操作
删掉指定分支
git branch -D <branchname>
往往在分支合并后当前分支的任务已经完成,可以删除处理。
VSCODE图形操作
在BRANCHES栏目中进行分支的增删合并等操作。
TAG
可以创建一个tag来指向软件开发中的一个关键时期(一次关键提交),比如版本号更新时可以建立“v2.0”、“v3.1”标签,这样在以后回顾的时候会比较方便。
tag的主要操作有:查看tag、创建tag、验证tag以及共享tag。
查看tag
列出所有tag
git tag
列出的tag是按字母排序的,和创建时间无关。
如果只想查看某些tag的话,可以加限定:
git tag -l v1.*
# 这样就只会列出1.*的TAG
创建tag
创建tag
git tag v1.0
附带信息的tag
git tag -a v1.0 -m 'first version'
-m
后添加注释信息,方便日后查看。
有签名的tag
git tag -s v1.0 -m 'first version'
需要有有GPG私钥。
为以前的commit添加tag
首先查看以前的commit。
git log --oneline
假如有commit:8a5cbc2
使用哈希值索引,为该提交添加tag。
git tag -a v1.1 8a5cbc2
删除tag
git tag -d v1.0
验证tag
git tag -v v1.0
需要GPG私钥。
Git与GitHub远程仓库
远程仓库的推送和拉取
在GitHub建立新仓库后,可以多人远端合作项目。
新建仓库后GitHub会提示上传新建仓库和上传已有仓库的不同指令,依照提示依次执行即可。
推送
git push
在对应需要更改的分支下使用该命令,将该分支下的更改推送到远程仓库。
拉取
git pull
如果存在远程有而本地还未有的更新,如其他人的更新或者直接在GitHub页面上对远程仓库进行的修改,可以通过该指令拉取到本地。
注意: 如果远程已有更新而本地未有,在推送之前需要先拉取远端的更新,与本地多分支合并时的处理相同,在本地确认完成后再推送至远端。
共享tag
执行git push时,tag不会上传到服务器,为了共享这些tag,需要使用:
git push origin –tags