git的常用命令以及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 [name]
git config user.email [EmailAddress]
git config --global user.name [name]
git config --global user.email [EmailAddress]
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 hot_fix命令
    两步就完成了将hot_fix的分支合并到master分支上

  • 解决冲突步骤(这个不仅仅适用于本地的两个分支合并,还适用于本地文件和远程拉取文件发生冲突时的处理):
    第一步:编辑文件,删除特殊符号
    第二步:把文件修改到满意的程度,保存退出
    第三步:git add [文件名]
    第四步:git commit -m [日志信息]
    注意在第四步commit的时候不能带文件名

合并时发生冲突的原因:

  1. 如果一个分支改了某个文件,另一个分支没有改这个文件,那么合并的时候是不会有任何问题的。
  2. 如果两个分支改了同一个文件,但是改的行不一样,那么系统会提示,需要人工去确认一下到底如何修改。
  3. 如果两个分支改了同一个文件,但是改的行一样,那么系统会提示,而且在那个文件中会标注在其中一个分支那行是怎样的,在另一个分支那行是怎样的,最后需要人工去确认一下到底如何修改。

本地库和远程库构建联系,git和github联合使用

创建地址别名

方便进行push操作,在git中输入命令:
git remote add [远程地址别名] [github 的HTTPS地址]

git remote add testpush https://github.com/haoqiangyang1998/testbilibili20200712.git

查看别名是否设置成功
git remote -v

推送命令

此命令用于将本地库的修改上传到远程仓库
git push [远程地址别名] [远程分支名称]

git push testpush master

克隆命令:

git clone [github 的HTTPS地址]

git clone https://github.com/haoqiangyang1998/testbilibili20200712.git

克隆的实际作用效果:

  1. 完整地把远程库下载到本地
  2. 创建名为origin的远程地址别名
  3. 初始化本地库

他人修改自己的远程仓库(即github的repository)

他人提出加入团队申请,加入你的团队后,才能对你的仓库进行push操作,从而实现远端仓库更新。

假设别人对自己的仓库进行了修改,那么如何将这个修改更新到自己的本地库?

  • 命令:git fetch [远程地址别名] [远程分支名称]
    例如:git fetch testpush master
    作用:把远程库的文件下载到本地库,但没有下载到工作区
    命令:git merge [远程地址别名] / [远程分支名称]
    例如:git merge testpush/master
    作用:把本地库的文件合并到工作区

  • 当然以上两个步骤略微地复杂,其实用一个git pull命令即可
    命令:git pull [远程地址别名] [远程分支名称]
    例如:git merge testpush master
    作用:把远程库的文件下载到本地库,并合并到工作区
    注意它与git clone的区别,git clone是有三个操作的,而git pull只有下载并合并到工作区这一个操作,因此在操作之前,需要用git init命令初始化git本地仓库以及用git remote add命令设置远程地址别名。

如果两个人协作开发,一个人已经push,那么这时另一个人push是不被允许的,因为github认为你不知道远程仓库已经修改了。
这时就需要先git pull [远程地址别名] [远程分支名称]
然后就进入了MERGING的状态,程序会提示你哪个文件冲突了,你需要对那个冲突文件进行人为修改,之后就进行合并时发生冲突的四个步骤:修改到满意的程度->git add -> git commit -m “message”(这里不需要带文件名)-> git 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命令就好了

最后,创作不易,希望大家能顺手点个赞。如果觉得有帮助,可以加个收藏,给作者更大的创作动力

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值