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 不显示彩色文件名

  1. 蓝色 --> 目录

  2. 绿色 --> 可执行文件

  3. 红色 --> 压缩文件

  4. 浅蓝色 --> 链接文件

  5. 灰色 --> 其他文件

  • -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 的时候不能带文件名

合并时发生冲突的原因:

  1. 如果一个分支改了某个文件,另一个分支没有改这个文件,那么合并的时候是不会有任何问题的。

  2. 如果两个分支改了同一个文件,但是改的行不一样,那么系统会提示,需要人工去确认一下到底如何修改。

  3. 如果两个分支改了同一个文件,但是改的行一样,那么系统会提示,而且在那个文件中会标注在其中一个分支那行是怎样的,在另一个分支那行是怎样的,最后需要人工去确认一下到底如何修改。

本地库和远程库构建联系,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

克隆的实际作用效果:

  1. 完整地把远程库下载到本地

  2. 初始化本地库

他人修改自己的远程仓库(即 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的使用的主要内容,如果未能解决你的问题,请参考以下文章

git--github使用

如何管理在每个 git 版本中添加私有代码片段?

PHP代码-psysh调试代码片段工具

TODO:Github的使用技巧之同步代码

Git的基本了解与使用向github提交代码

码农的好助手:版本管理工具git的使用