git与github的使用
Posted RealEchooo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git与github的使用相关的知识,希望对你有一定的参考价值。
引言
首先需要明确的是 git 的工作结构。
git 中有四个区域:工作区
(就是电脑里的文件)暂存区
(用于临时保管需要提交的文件)本地库
(记录历史版本,只要将文件提交到了本地库,可以用 git reset 命令将文件夹切换到历史的任意一个版本状态)远程仓库
(用于托管本地库的文件,通常用 github 或者码云,方便多人协同开发)
git 常用命令
git init
作用:初始化空的本地仓库,会生成一个.git 的隐藏文件夹
格式: git init
git init
git add
作用:用于将工作区的文件提交到暂存区
格式: git add [filename]
git add yhq.txt
如果想要一次性提交文件夹的所有文件,用:
git add .
git commit
作用:用于将暂存区的文件提交到本地库
格式: git commit -m [message] [file name]
git commit -m "First commit" yhq.txt
提示:这个 message 最好能够明显地看出修改了什么内容
cd
cd 就是 change directory 的意思
作用:改变当前的工作路径。
格式:cd ~
cd ..
cd [dirName]
cd ~ // 返回到 home 目录(或者说路径)
cd ..// 返回上一级路径
cd [dirName] // 前往到 dirName 的路径
vim
作用:编辑 txt 文件
格式: vim [filename]
vim yhq.txt
注意在编辑完成后输入 :wq
代表保存并退出文件
还可以输入 :set nu
来显示窗口代码的行号
pwd
print working directory
作用:显示当前所在路径
格式: pwd
pwd
touch
作用:创建一个新的文件
格式: touch [filename]
touch yhq.txt
touch yhq.doc
cat
connect and type
作用:连接文件并打印到标准输出设备上,cat 经常用来显示文件的内容
格式:cat [filename]
cat yhq.txt
git config
git config user.name yhq
git config user.email 123456@qq.com
git config --global 是配置系统用户级别的用户名和邮箱。
git config --global user.name yhq
git config --global user.email 123456@qq.com
git log
作用:用来查看本地库中历史版本记录
格式:git log
git log --pretty=oneline
git log --oneline
git reflog
(推荐使用这个,因为它只展示部分的哈希码)
git log
git log 的多屏显示控制方式:
空格向下翻页
b 向上翻页
q 退出
与 git log 功能相同的还有以下三个命令,他们可以进一步简化 git log 的信息,只显示关键信息
git log --pretty=oneline
git log --oneline
git reflog(推荐使用这个,因为它只展示部分的哈希码)
git reset
作用:用来跳转到本地库中各个历史版本
格式:git reset --hard [HashValue]
git reset --hard HEAD^^
git reset --hard HEAD~2
git reset --hard [哈希码(也就是索引值)]
这个既可往前查看版本,也可往后查看版本。
git reset --hard 8a98931
使用 ^ 符号
git reset --hard HEAD^^
这个只能看之前的版本(即只能后退),一个 ^ 往后退一步。
git reset --hard HEAD^^
// 这就代表往后退两步,查看此版本之前第二次 commit 的版本
使用~符号
git reset --hard HEAD~2
这个只能看之前的版本(即只能后退)。这个好处就在于往后退 N 步,只需要 git reset --hard HEAD~N,而不需要去敲 N 个 ^
git reset --hard HEAD~2
注意到 git reset 后面用了 hard, 实际上还存在 soft 和 mixed
git reset 各种使用版本 | 备注 |
---|---|
git reset --soft | 仅仅在本地库移动 HEAD 指针,不会修改本地文件 |
git reset --mixed | 在本地库移动 HEAD 指针,也会重置暂存区,不会修改本地文件 |
git reset --hard | 在本地库移动 HEAD 指针,也会重置暂存区,也会重置工作区。会修改本地文件 |
rm
作用:删除文件夹中的文件,这只是在工作区中执行
格式:rm [filename]
rm yhq.txt
通常删除以后,可能还需要提交到本地库,以保存此次修改,因此需要加上以下两个命令:
git add yhq.txt
git commit -m "First delete the file" yhq.txt
删除以后,上传到本地库做记录,只要上传到本地库,记录是不可磨灭的(这种记录是整个文件夹的快照记录,而不是某个文件的记录),用 git reset --hard 命令就可以随意地观察到任意时刻的版本
ls
这个命令非常强大,功能也非常丰富多样,现将它们罗列如下:ls [-参数]
-a 列出目录下的所有文件,包括以。开头的隐含文件。
-A 显示除 “.” 和 “..” 外的所有文件。
-k 以 k 字节的形式表示文件的大小。
-l 列出文件的详细信息。
-s 在每个文件名后输出该文件的大小。
-t 以时间排序。
-u 以文件上次被访问的时间排序。
-S 以文件大小排序。
-R 列出所有子目录下的文件。
-p -F 在每个文件名后附上一个字符以说明该文件的类型。"*": 表示可执行的普通文件;"/": 表示目录;“@”: 表示符号链接;“|”: 表示 FIFOs;“=”: 表示套接字 (sockets)。
-X 以文件的扩展名 (最后一个。后的字符) 排序。
-m 横向输出文件名,并以 “,” 作分格符。
--color=no 不显示彩色文件名
蓝色 --> 目录
绿色 --> 可执行文件
红色 --> 压缩文件
浅蓝色 --> 链接文件
灰色 --> 其他文件
-b 把文件名中不可输出的字符用反斜杠加字符编号 (就象在 C 语言里一样) 的形式列出。
-c 输出文件的 i 节点的修改时间,并以此排序。
-d 将目录象文件一样显示,而不是显示其下的文件。
-e 输出时间的全部信息,而不是输出简略信息。
-f -U 对输出的文件不排序。
-g 无用。
-i 输出文件的 i 节点的索引信息。
-n 用数字的 UID,GID 代替名称。
-o 显示文件的除组信息外的详细信息。
-q 用?代替不可输出的字符。
-r 对目录反向排序。
-x 按列输出,横向排序。
-B 不输出以 “~” 结尾的备份文件。
-C 按列输出,纵向排序。
-G 输出文件的组的信息。
-L 列出链接文件名而不是链接到的文件。
-N 不限制文件长度。
-Q 把输出的文件名用双引号括起来。
-1 一行只输出一个文件。
--help 在标准输出上显示帮助信息。
--version 在标准输出上输出版本信息并退出。
git status
作用:查看当前工作区、暂存区、本地库的状态,看是否有文件没有放在暂存区或者没有上传到本地库
git diff
作用:比较同一文件的修改差异。
格式:git diff [filename]
git diff HEAD [filename]
git diff
git diff yhq.txt
// 显示出还在工作区的文件 yhq.txt 与 当前已经在暂存区的文件 yhq.txt 之间的差异。显然如果新修改的文件提交到暂存区之后,那么 git diff yhq.txt 就不会显示任何的东西了。git diff HEAD yhq.txt
// 显示出还在工作区的文件 yhq.txt 与 当前已经在本地库的文件 yhq.txt 之间的差异。那么只要没有 git commit, 就有显示git diff HEAD^ yhq.txt
// 显示出还在工作区的文件 yhq.txt 与 之前已经提交到本地库的文件 yhq.txt 之间的差异,即与本地库的上一个版本的 yhq.txt 进行比较。只要有不同,都会有显示git diff
// 比较文件夹里每个文件与某个版本里的每个文件的差异
关于分支的管理
分支:在版本控制过程中,使用多条线同时推进多个任务
分支管理的本质:git 分支管理本质上是移动指针
查看分支:
git branch -v
创建分支:
git branch [BranchName]
切换分支:
git checkout [BranchName]
注意切换分支之后,在这个分支做任何文件操作都是不影响主分支的。
合并分支步骤:
第一步:切换到接受修改的分支上(或者说被合并的分支)
git checkout master
第二步:执行 git merge hotfix 命令 两步就完成了将 hotfix 的分支合并到 master 分支上解决冲突步骤(这个不仅仅适用于本地的两个分支合并,还适用于本地文件和远程拉取文件发生冲突时的处理):
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m [日志信息]
注意在第四步 commit 的时候不能带文件名
合并时发生冲突的原因:
如果一个分支改了某个文件,另一个分支没有改这个文件,那么合并的时候是不会有任何问题的。
如果两个分支改了同一个文件,但是改的行不一样,那么系统会提示,需要人工去确认一下到底如何修改。
如果两个分支改了同一个文件,但是改的行一样,那么系统会提示,而且在那个文件中会标注在其中一个分支那行是怎样的,在另一个分支那行是怎样的,最后需要人工去确认一下到底如何修改。
本地库和远程库构建联系,git 和 github 联合使用
创建地址别名
git remote add testpush https://github.com/haoqiangyang1998/testbilibili20200712.git
查看别名是否设置成功git remote -v
推送命令
git push testpush master
克隆命令:
git clone https://github.com/haoqiangyang1998/testbilibili20200712.git
克隆的实际作用效果:
完整地把远程库下载到本地
初始化本地库
他人修改自己的远程仓库(即 github 的 repository)
他人提出加入团队申请,加入你的团队后,才能对你的仓库进行 push 操作,从而实现远端仓库更新。
假设别人对自己的仓库进行了修改,那么如何将这个修改更新到自己的本地库?
跨团队协作
C 去 fork 一下 A 的库,clone 下来
然后修改,再 push,因为整个操作都是在 C 的库里,所以可以不管 A,A 的库也不会发生变化。
接着想让 A 接受 C 的修改,需要提出申请,即 pull request。
C 在 github 中提出 pull request->new pull request -> create pull request,填好相应的信息即可,接着就是等待 A 处理申请。
A 可以在红框的两个部分进行预览,如果觉得没问题,可以点击 Conversation, 然后进行 merge pull request 的操作,这样远程库就修改了。
最后要同步到工作区,就用 git pull 命令就好了
以上是关于git与github的使用的主要内容,如果未能解决你的问题,请参考以下文章