git记录

本文详细介绍了Git作为分布式版本控制系统的基础概念、操作流程,包括文件状态、基本命令如初始化、添加、提交和分支管理。同时讲解了GitLab的使用,包括远程仓库克隆、分支合并及解决冲突的方法。此外,还提到了GitLab与Git的关系,以及在实际开发中的工作流程和常见问题解决方案。
摘要由CSDN通过智能技术生成

Gitlab

1. Git简介

什么是git?

git是开源的分布式版本控制系统,可以对开发的版本进行管理。

相比较与其他版本控制器为什么选择git?

这里与SVN、CVS等版本控制器进行比较。

  • SVN是集中式,即有一个中央服务器,每一次都需要先在中央服务器中进行下载,在中央(这一台电脑)进行版本的控制。
  • git 是分布式,没有中央服务器,每一个电脑都有一个完整的版本库,如果A和B都同时改了,可以进行相互的推送,就可以看见互相的修改。

由此可以看出当采用SVN,主服务器发生问题,所有的电脑都将瘫痪无法工作,而采用git则可以很好的解决这个问题。

1.1 Git中一些基础概念

Git的分层

git的工作总共分四层,其中三层是在自己本地也就是说git仓库,包括了工作目录、暂存区和本地仓库。

  • 工作目录(workspace)是我们执行一切文件操作的地方,也就是我们执行命令git init时所在的地方

  • 暂存区(index)在.git目录下,用于临时存放改动,事实上它只是一个文件,保存即将提交到文件列表信息,类似与word中的临时保存文件。

  • 本地仓库(repository)也是在.git目录下,用来存数据的。这里面有本地所提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。

  • 远程仓库(remote)在中心服务器,也就是我们做好工作之后推送到远程仓库,或者从远程仓库更新下来最新代码到本地。

img

Git的文件状态

•未追踪(Untracked): 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged

•已暂存(Staged):暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

•已提交(Committed):文件已经提交

•已修改 (Modified): 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

•文件已入库未修改(Unmodify):文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件


1.2 Git的基本操作

Git初始化

Git - 初次运行 Git 前的配置 (git-scm.com)

初始化本地的发送姓名及邮箱

git config --global user.name "luhui"
git config --global user.email "luhui***@aaa.com"

创建命令


创建代码库

git init

运行结果如下:

可以看到文件中多了.git 文件用来存放版本库。

可以看一下.git中有什么文件


文件中状态切换

基本状态切换如下图所示:

  • 当文件中新建一个test文本,内容是“我刚创建”,通过如下命令查看状态
git status

​ 可以看到结果,文件test 是未被追踪的

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test.txt

nothing added to commit but untracked files present (use "git add" to track)

​ 目录结构如下:


  • 然后执行添加进暂存区的命令
git add test.txt

​ 这个时候就会将文件上传至stage区,文件状态显示已提交,结果如下

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   test.txt

目录结构如下:


  • 修改工作区中的内容“我被修改了”

    此时的文件结构如下图

    查看文件状态

$ git status
On branch master

No commits yet

Changes to be committed:       ##这里是暂存区中的文件
  (use "git rm --cached <file>..." to unstage)
        new file:   test.txt

Changes not staged for commit:   ##这里是工作区中的文件
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   test.txt

​ 也就是一个文件处于committed 状态(第一次提交的“我刚创建”,即暂存区中文件),一个处于modified状态(第二次修改的“我被修改了”,即工作区中文件)。


  • 将缓存区文件上传至本地仓库
git commit -m "第一次上传本地仓库"
    • -m后面写的是这次提交的信息,帮助想起这次提交的内容

      这时文件结构如下:


1.3 Git 的分支

1.3.1分支管理

使用git branch查看当前分支

git branch
* master

*表示当前分支。

修改下test.text文件内容为“我在master分支”。

通过如下命令直接将工作区文件上传至本地仓库。

git commit -am"修改分支内容"

master分支是开发主线,这时有个功能需要在不影响主线的情况下开发,就需要新建一个分支。比如我们要开发v1版本,就可以使用git branch beta_v1新建一个分支,现在查看下分支情况:

$ git branch
  beta_v1
* master

虽然新建了一个分支,但是现在还是处于master分支下,我们先使用git checkout beta_v1切换到beta_v1分支。

$ git branch
* beta_v1
  master
1.3.2分支合并

分支fastforward 合并方式

编辑test.txt文件,修改内容为我在beta_v1分支被修改了git commit -am "修改beta_v1分支文件内容"提交,然后再使用git checkout master切换回master分支。

使用git merge beta_v1把分支beta_v1的内容合并过来,这时文件被自动合并了,此时的文件内容是:

$ cat test.text
我在beta_v1分支被修改了

这个时候master分支和beta_v1分支指向的是同一个对象,所以就可以将beta_v1分支进行删除。

1.3.3 合并冲突
  • 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。

  • 示例:

    • 当在主分支中对文件进行修改并提交,然后再另一个分支对同样的文件进行修改并提交,再请求merge的时候就会发生冲突。

      • 发生冲突之后,冲突的两个文件会同时显示,选择要留下的文件,并重新提交就可以解决冲突。
1.3.4 git stash

1.4 Tortoise工具的使用/Sourcetree

Tortoise工具的使用

Sourcetree工具的使用

2.Gitlab与git之间的关系

gitlab就是git的远程仓库,远程仓库可以是Gitlab也可以是github等等。

  • 首先将远程仓库克隆下来。

1. 远程账号与本地帐号之间的关联

  • http
  • SSH

2. 变基

3. gitlab中常见的工作流程

1. 分布式工作流程

  • 当A和B同时将代码拉下来并进行修改,B首先提交了修改代码,如果A仍然想提交会提示错误,必须要将B的代码下载下来并在B的代码基础上进行提交才能通过。
      1. 项目维护者推送到主仓库。
      2. 贡献者克隆此仓库,做出修改。
      3. 贡献者将数据推送到自己的公开仓库。
      4. 贡献者给维护者发送邮件,请求拉取自己的更新。
      5. 维护者在自己本地的仓库中,将贡献者的仓库加为远程仓库并合并修改。
      6. 维护者将合并后的修改推送到主仓库。

2.git

  • 局域网:Gitlab
  • 互联网:Github、Gitee

4. 历史版本

  • 查看版本历史

    • git reflog 查看提交记录(简易版)
    • git log 查看提交记录(简易版)
    • git reset --hard 版本号
  • 分支的操作

    • git branch -v 查看当前分支
    • git branch 分支名 创建分支
    • git checkout 切换分支
    • git merg 分支名(A) 在当前分支上将A合并过来
  • fork 将别人的仓库复制一份到自己的仓库。

  • git fetch 相当于是从远程获取最新版本到本地,不会自动merge

  • 本地生成SSHkey

5. git log

  • 一定要记得cd 到那个文件夹才能用git log

6. unpack failed: index-pack abnormal exit

gitlab限制上传问题

Git push error: unpack failed: index-pack abnormal exit - Stack Overflow

7 .rebase /cherry -pick

关于Git的rebase操作与cherry-pick操作的建议_林中路-CSDN博客

8. md5值

9.根据版本回退

https://segmentfault.com/a/1190000020863861
https://blog.csdn.net/FrontierSetter/article/details/83413889

git reset --hard head^ # 撤回当次提交

10.gitlab merge request模板

https://blog.csdn.net/ouyang_peng/article/details/105848365/

11.Git 多仓库管理

Google Git-Repo 多仓库项目管理 - 知乎 (zhihu.com)

12.gitlab 邮件配置

  • gitlab 官方文档https://docs.gitlab.com/omnibus/settings/nginx.html

  • gitlab.rb 配置文件的含义https://liushiya.blog.csdn.net/article/details/119788015

  • gitlab-ctl reconfigure不敢乱用https://blog.csdn.net/vbaspdelphi/article/details/54376421

https://www.firegod.cn/tools/jenkins/jenkins-从-git仓库拉取代码超时解决办法/)

13 分支的分类

  • active branch 活跃的分支
  • stale branch 过时的分支
  • 但是不知道test 下面的是啥
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值