git系统学习

git命令行

usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           [--config-env=<name>=<envvar>] <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone     Clone a repository into a new directory
   init      Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add       Add file contents to the index
   mv        Move or rename a file, a directory, or a symlink
   restore   Restore working tree files
   rm        Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect    Use binary search to find the commit that introduced a bug
   diff      Show changes between commits, commit and working tree, etc
   grep      Print lines matching a pattern
   log       Show commit logs
   show      Show various types of objects
   status    Show the working tree status

grow, mark and tweak your common history
   branch    List, create, or delete branches
   commit    Record changes to the repository
   merge     Join two or more development histories together
   rebase    Reapply commits on top of another base tip
   reset     Reset current HEAD to the specified state
   switch    Switch branches
   tag       Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch     Download objects and refs from another repository
   pull      Fetch from and integrate with another repository or a local branch
   push      Update remote refs along with associated objects
git命令含义
add添加修改的文件,如果改的比较多用 “.”
bisect使用二进制搜索来查找引入bug的提交
branch列出、创建或删除分支
checkout命令用于在不同的分支之间切换、恢复文件、创建新分支等操作。git2.23以后引入了 git switch 和 git restore 命令
clone将存储库克隆到新目录中,从服务器下载代码用的
commit记录对存储库的更改
diff显示提交之间的变化,提交和工作树等
fetch从另一个存储库下载对象和引用
grep打印与图案匹配的行
init创建一个空的Git存储库或重新初始化一个现有的Git存储库
log显示提交日志
merge将两个或多个发展历史连接在一起
mv移动或重命名文件、目录或符号链接
pull从另一个存储库或本地分支获取并与之集成,下载新的代码
push更新远程引用和相关对象更新远程引用和相关对象,提交代码
rebase在另一个基本提示之上重新应用提交
reset将当前HEAD重置为指定状态
rm从工作树和索引中删除文件
show展示各种类型的对象
status显示工作树状态
tag创建、列出、删除或验证使用GPG签名的标签对象
restore恢复工作树文件
switch切换分支

上面是部分的命令,想要得到完成的命令列表可以使用git help -all命令。

获取git 版本号

git --version
在这里插入图片描述

创建初始版本库

创建git库

新建一个新的文件夹进入后输入
git init 创建一个.git的隐藏目录

初始化用户名和密码

然后创建用户名和邮箱

git config --global user.name "用户名"
 git config --global user. Email "邮箱"

查看用户名和邮箱

git config --list
在最下面就可以看到。

修改用户名和密码

git config user.name 修改后的用户名
git config user. email 修改后的邮箱

将文件添加到版本库中

在这里插入图片描述
在git库中新建一个文件夹里面存放一个main.cpp的文件。

git add .		//将本目录下所有修改的文件添加到库中
git status			//查看git状态

在这里插入图片描述
这里就说已经添加到库中了。这里只是暂存到库中,还没有正式的提交,正式提交使用commit这个命令,这个命令是需要编写提交log的。add这个只是一个中间暂存文件,如果确认修改好了,就可以提交了,要不然提交的过于频繁。

删除暂存文件

在这里插入图片描述
目前暂存库中有两个文件,一个是C_add.cpp一个是main.cpp我想删除C_add.cpp

git rm --cached .\src\C_add.cpp

可以使用rm命令--cached这是是子命令,缓存的意思,意思是删除缓存中的文件。
在这里插入图片描述
这里只是删除了暂存库中的文件,本地文件并没有删除。文件中的内容也不会被改动。

提交代码

git commit -m "新建项目"

需要注意的是-m和后面的log必须写
在这里插入图片描述
再看一下git状态
在这里插入图片描述
刚才暂存的文件已经提交了。

查看提交信息

git log

在这里插入图片描述
条目按照从新到最老的顺序罗列出来了。
每个条目都有提交作者的名字,和email地址,提交日期,变更的日志信息和提交的内部识别码。
其中作者名字和email地址就是在初始化git库的时候设置的。

查看更加详细的信息

在这里插入图片描述

git show 8dca406b7b795cdb8cc89b482c69596f18527e10

8dca406b7b795cdb8cc89b482c69596f18527e10这个就是git内部识别码
如果直接git show输出的就是最近一次的提交信息。

查看提交差异

git diff 8dca406b7b795cdb8cc89b482c69596f18527e10  bcda568437100cf99a9d4ccf5ce2d100c926f58e 

在这里插入图片描述
需要注意的是diff后面的识别码旧的识别码在前新的识别码在后面
绿色的加号后面就是修改的内容。

版本库内文件的删除和重命名

查看库里有那些文件

git ls-files

在这里插入图片描述

删除库里的文件

我要删除C_add.cpp

git rm ./src/C_add.cpp
git commit -m "删除了C_add.cpp"

./src/C_add.cpp 这个参数就是通过git ls-files查看到的。
需要注意的是,删除库中的文件,本地文件也会被删除掉。删除玩还需要commit提交一下代码。

在这里插入图片描述

重命名库里的文件

最简单的方式。
git mv .\src\files.cpp .\src\FFiles.cpp
但是任然要实行 commit命令。
这样本地文件就会被重命名。

重命名库里的文件通常思路就是:

  1. 重命名本地文件
  2. 然后删除库里的文件
  3. 最后提交更新的文件
mv .\src\myadd.cpp .\src\files.cpp
git rm .\src\myadd.cpp
git add .
git commit -m "add.cpp to files.cpp"

在这里插入图片描述

打标签

git tag -m "version 1.0.0" V1.0 42b0a2923a2879cafd220c7274cfd89ee70af174

“version 1.0.0” 这个参数是标签log, V1.0是版本号。

查看标签

git tag

在这里插入图片描述

配置文件

.git/config		//位置在下载代码目录下的 .git 目录下
~/.gitconfig	// linux系统在Home下, windows系统在C盘用户目录下。

创建分支

理论上分支的名字是任意的,默认分支是master,大多数开发者在这个分支上保持版本中最强大和最可靠的开发线。
为了支持可扩展性和分类管理组织,可以创建一个带层次的分支名。
例如:

  • 修复bug的分支可以创建 bug/001 bug/pr-123
  • 增加新功能可以创建newFunc/qa002

这样看到分支名称就可以知道这个分支是干什么的。

分支名不能用的字符:

  • 不能以/结尾,但是可以出现在中间
  • 分支名不能-开头
  • 以斜杠分割的组件不能以.开头(./是当前目录的意思,不能连着用)
  • 分支名任何地方都不能出现..
  • 不能出现任何空格或其他空字符
  • 不能包含~ ^ : ? * [,因为git支持通配符这些都不能用。
  • ASCII码,小于八进制的\040\177不能使用
git branch bug/pr-001 630f582d51f4e8cac3f822053b7dca0c9a619db7 // bug/pr-001 分支名,后面的是ID

查看分支

git branch 是查看分支的命令
在这里插入图片描述
git show-branchgit branch显示的更加详细。
在这里插入图片描述

git show-branch bug/pr-001 查看bug/pr-001的提交记录。

切换分支

两种方式:
在这里插入图片描述
当前分支是mater,新版本的git使用

git switch bug/pr-001

在这里插入图片描述
老版本的git使用:

git checkout master

在这里插入图片描述

创建并切换分支

git switch -C  bug/pr-003 630f582d51f4e8cac3f822053b7dca0c9a619db7
git checkout -b  bug/pr-004 630f582d51f4e8cac3f822053b7dca0c9a619db7
完全等价与
git branch  bug/pr-003 630f582d51f4e8cac3f822053b7dca0c9a619db7
git switch(checkout)  bug/pr-003

删除分支

不能删除当前使用的分支。
删除当前的分支将导致git无法确定工作目录树应该是什么样子的。

git branch -d bug/pr-004

在这里插入图片描述

diff

git diff 命令进行树的比较时2可以通过提交名,分支名,或者标签名。

git diff 

会显示当前目录中那些文件进行了修改。
在这里插入图片描述
如果这条命令有输出,说明工作目录中已经编辑或修改的东西没有暂存。

git diff --cached    
git diff --cached .\src\main.cpp		//查看单个文件的

查看暂存文件的差异。如果提交了代码这个命令输出就是空的。

git diff master .\src\main.cpp

我当前的使用的分支是bug/pr-001 我想与master的文件进行比较
在这里插入图片描述

路径显示的git diff

~5是最近5次提交

git diff --stat master~5 master

在这里插入图片描述
如果只想看src文件下的变化

git diff --stat master~5 master src

在这里插入图片描述
只想看main.cpp的差异

git diff --stat master~5 master .\src\main.cpp  

在这里插入图片描述

合并

git 支持同时合并三个四个或多个分支,但是大多数情况下一次只合并两个分支。
当一个分支修改与另外一个分支不冲突的时候,git会计算合并结果,并创建一个新的提交代表新的统一状态。当分支发生冲突的时候,git并不解决 冲突,这通常出现在多人对同一文件进行修改,git会把这种争议的文件在索引中定义为“未合并”。留给开发人员处理。
合并 bug/pr-002

git merge bug/pr-002

更改提交

作为一般原则,只要没有其他开发人员已经获得你的版本库的副本,你就可以自由的修改和完善版本库提交历史记录。或者说,只要没人有版本库中某个分支的副本,你就可以修改该分支。
如果一个分支已经公开了,并且可能已经存在与其他版本库中,那就不应该重写,修改或更改该分支的任何部分。

使用git reset

git reset命令会把版本库和工作目录改变为已知状态。具体而言git reset调整HEAD引用指向给定的提交,默认情况下还会更新索引以匹配该提交。git reset命令也可以修改工作目录以呈现给定提交代表的项目修订版本。
可以把git reset当成“破坏性的”,因此可以覆盖并销毁工作目录中的修改。事实上数据可能丢失,即使备份了文件,也可能无法恢复。此命令的重点为HEAD,索引和工作目录建立与恢复已知的状态。

git reset命令有三个主要选项: --soft, --mixed, --hard

选项HEAD索引工作目录
–soft
–mixed
–hard
  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值