Git安装及常用命令

Git是什么?

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

git和svn的区别:

1.SVN是集中式版本控制系统,版本库是集中放在中央服务器的。
2.Git是分布式版本控制系统,那么它就没有中央服务器的。
git和svn的区别:
1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

git的基本概念:

1. 四个工作区:

git本地有三个工作域:工作区(working directory), 暂存区(stage/index), 资源库(repository)。如果再算上远程服务器上的git仓库(remote directory)就可以分为四个工作域。其关系如下:
Git安装及常用命令_第1张图片

(1)Workspace: 工作区,就是你平时存放项目代码的地方
(2)Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
(3)Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数
据。其中HEAD指向最新放入仓库的版本
(4)Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

简单构图如下:
Git安装及常用命令_第2张图片

2 工作流程:

git工作的一般流程:

  1. 在工作目录中添加,修改文件
  2. 将需要进行版本管理的文件放入暂存区
  3. 将暂存区的文件提交到git仓库

3.文件的四种状态:

(1)Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态
变为Staged.
(2)Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文
件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
(3)Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可
进入暂存staged状态, 使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即
从库中取出文件, 覆盖当前修改
(4)Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致,
文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified

git基本命令:

1.安装git命令:sudo apt install git

切换管理员权限安装git。
Git安装及常用命令_第3张图片
我这个是已经安装好的,未安装的可以在提示出现时输入y,同意安装。

2.使用git init 命令将其变为一个可以通过git管理的仓库

在这里插入图片描述
注意事项:
第一次使用git命令提交代码之前,需要先设置用户名及邮箱,之后就不需要了:

stu@stu-virtual-machine:~/myproject$ git config --global user.email  "你的邮箱"
stu@stu-virtual-machine:~/myproject$ git config --global user.name "你的名字"

3.使用git add filename 添加文件到暂存区:

随便编写一个main函数。
Git安装及常用命令_第4张图片

在这里插入图片描述
就是这个步骤,从工作区到暂存区。
Git安装及常用命令_第5张图片

4.使用git status 查看仓库状态

stu@stu-virtual-machine:~/myproject$ git status
位于分支 master
尚无提交
要提交的变更:
(使用 "git rm --cached <文件>..." 以取消暂存)
新文件:  main.c
stu@stu-virtual-machine:~/myproject$

修改main.c的状态:
Git安装及常用命令_第6张图片

5.使用 git commit -m “版本描述信息” 提交版本到仓库

Git安装及常用命令_第7张图片
Git安装及常用命令_第8张图片

6.使用git log查看提交的历史记录

Git安装及常用命令_第9张图片

7.使用git reflog 查看对仓库的操作日志

在这里插入图片描述
8.使用git diff HEAD 比较当前内容与最后一次提交的版本的差异,如下在main.c中添加了一行内容,显示
添加的一行前面有‘+’号标识。如果内容相同则该命令不显示输出结果。HEAD也可以省略默认就是与最近
一次比较。

Git安装及常用命令_第10张图片
Git安装及常用命令_第11张图片
这块int b 也是修改项,把上文的in b改为了int b。

9.使用git checkout filename 放弃对工作区代码的修改。

Git安装及常用命令_第12张图片
把之前修改的还原回来。

10.使用git reset --hard HEAD^ 回退版本

回退一个版本:一个^。
Git安装及常用命令_第13张图片
在这里插入图片描述

也可以通过git reset --hard 版本号回退到任意指定版本

Git安装及常用命令_第14张图片

git分支的操作命令

在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

1.查看分支: git branch

2.创建分支: git branch 分支名

3.切换分支: git checkout 分支名

Git安装及常用命令_第15张图片

4.创建并切换到该分支: git checkout -b 分支名

5.删除分支,不能删除当前所处分支,切换到其它分支再删除: git branch -d 分支名

Git安装及常用命令_第16张图片

6.合并某个分支到当前分支: git merge 分支名 ,合并时可能产生冲突,需要解决冲突。 有时需要禁止快速合并,可执行:git merge --no-ff -m ‘描述’ 分支名

stu@stu-virtual-machine:~/myproject$ vi main.c
stu@stu-virtual-machine:~/myproject$ git branch
* dev
master
stu@stu-virtual-machine:~/myproject$ git add main.c
stu@stu-virtual-machine:~/myproject$ git status
位于分支 dev
要提交的变更:
(使用 "git restore --staged <文件>..." 以取消暂存)
修改:   main.c
7.历史记录一行显示 : git log --pretty=oneline
8.以图表形式显示分支:git log --graph
stu@stu-virtual-machine:~/myproject$ git commit -m 'dev添加main'
[dev 024836e] dev添加main
1 file changed, 5 insertions(+)
stu@stu-virtual-machine:~/myproject$ git status
位于分支 dev
无文件要提交,干净的工作区
stu@stu-virtual-machine:~/myproject$ git branch
* dev
master
stu@stu-virtual-machine:~/myproject$ git checkout master
切换到分支 'master'
stu@stu-virtual-machine:~/myproject$ git merge dev
更新 8bb2b7b..024836e
Fast-forward
main.c | 5 +++++
1 file changed, 5 insertions(+)
stu@stu-virtual-machine:~/myproject$ vi main.c
stu@stu-virtual-machine:~/myproject$ git branch
dev
* master
stu@stu-virtual-machine:~/myproject$

7.保护现场 git stash,当前工作区有代码修改了,是不能切换到其他分支,可以先保存现场,再切换

stu@stu-virtual-machine:~/myproject$ git status
位于分支 master
无文件要提交,干净的工作区
stu@stu-virtual-machine:~/myproject$ vi main.c
stu@stu-virtual-machine:~/myproject$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git restore <文件>..." 丢弃工作区的改动)
修改:   main.c
修改尚未加入提交(使用 "git add"/"git commit -a")
stu@stu-virtual-machine:~/myproject$ git branch dev
fatal: 一个分支名 'dev' 已经存在。
stu@stu-virtual-machine:~/myproject$ git checkout dev
error: 您对下列文件的本地修改将被检出操作覆盖:
main.c
请在切换分支前提交或贮藏您的修改。
正在终止
stu@stu-virtual-machine:~/myproject$ git stash
保存工作目录和索引状态 WIP on master: 4993413 解决合并冲突
stu@stu-virtual-machine:~/myproject$ git status
位于分支 master
无文件要提交,干净的工作区
stu@stu-virtual-machine:~/myproject$ git checkout dev
切换到分支 'dev'
stu@stu-virtual-machine:~/myproject$

分支策略: 首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

远程仓库操作:

1.生成通信秘钥:用于连接本机和远程仓库。

stu@stu-virtual-machine:~/myproject$ ssh-keygen -t rsa -C "你的邮箱"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/stu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):**这部分遇到要输入点回车就行**
Enter same passphrase again:
Your identification has been saved in /home/stu/.ssh/id_rsa
Your public key has been saved in /home/stu/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:QFRjZabbzQadfEYfvGIanZbRkWdYSLpv70iSgbRMFr4 你的邮箱
The key's randomart image is:
+---[RSA 3072]----+
|   .o.+.= .=*+|
|   . . * + =o=+|
|   . . * * *.+|
|    . B O @ . |
|    S E @ . |
|      o +  |
|      o + |
|       + o |
|       ..o|
+----[SHA256]-----+
stu@stu-virtual-machine:~/myproject$

然后就生成了自己的秘钥,生成的公钥在/home/stu/.ssh/下

Git安装及常用命令_第17张图片

2.测试连通:以gitee为例

创建帐号什么的就不用说了,下面说说如何使用远程仓库。

首先需要在gitee上建立仓库。

Git安装及常用命令_第18张图片
Git安装及常用命令_第19张图片
Git安装及常用命令_第20张图片

建立链接:

Git安装及常用命令_第21张图片
Git安装及常用命令_第22张图片
Git安装及常用命令_第23张图片

测试链接

在这里插入图片描述
成功连接上远程仓库。

与远程仓库交互基本命令:

  1. 克隆项目:git clone 项目地址
  2. 提交分支到远程仓库:git push origin 分支名
  3. 提交分支到远程仓库,并跟踪分支 :git push -u origin 分支名
  4. 拉取远程服务器上的分支更新到本地 :git pull origin 分支名
    这块要注意的一点是,一般进行提交时,要先进行拉取合并。

一般企业工作时,一定要注意自己提交代码的正确性,gitee会有身份记录,出现bug时,甩锅都甩不了哦。

你可能感兴趣的:(git)