gitlab特性和实用技巧

  目录结构:

  • 第一章 git概述
    • 1.1  本地仓库结构图
    • 1.2 文件状态
    • 1.3 生命周期
  • 第二章 git于svn比较
  • 第三章 Git及基本特性及应用
    • 3.1.获取git仓库
      • 3.1.1 初始化版本库
      • 3.1.2 首次推送本地项目到远程仓库
      • 3.1.3 克隆远程仓库 
    • 3.2. 分支管理
      • 3.2.1  svn和git 
      • 3.2.2 本地分支操作
      • 3.2.3.分支合并
    • 3.3 关于版本回退
      • 总结:
    • 3.4 撤销修改
      • 1. 存在两种情况 
      • 2.处理办法:
      • 总结:
    • 3.5 删除文件
    • 3.6.git的暂存功能
      • 场景
      • 总结
    • 3.7.多人协作
    • 3.8关于标签 
      • 3.8.1 创建标签
      • 3.8.2 操作标签
  • 第四章 git 删除远程仓库文件
    • 4.1  预览将要删除的文件
    • 4.2 确定无误后删除文件
    • 4.3 提交到本地并推送到远程服务
    • 4.4 修改本地 .gitignore 文件 并提交

 

第一章 git概述

1.1  本地仓库结构图

1.2 文件状态

已提交(committed):数据已经安全的保存在本地数据库中。

已暂存(staged):对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

已修改(modified):修改了文件,但还没保存到数据库中。

工作流程:

1、检出工程。

2、在工作目录中修改文件。

3、暂存文件,将文件的快照放入暂存区域。

4、提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

1.3 生命周期

使用Git 时文件的生命周期:

第二章 git于svn比较

 

 

总结对比,如下所示:

 

SVN

Git

管理方式

集中式

分布式

联网

Commit/log必须联网

本地可进行任何操作

服务端软件支持

必须有服务端

不需要

数据保存

按文件保存

按元数据保存

分支管理

另开一个目录,完全拷贝一份

同一个目录,文件只一份,存快照

第三章 Git及基本特性及应用

3.1.获取git仓库

3.1.1 初始化版本库

在计算机上任意地方创建一个文件夹,进入文件夹目录右击鼠标点击git bash here打开git命令窗口,执行git init命令。

3.1.2 首次推送本地项目到远程仓库

将要推送的项目拷贝到本文件夹下,然后执行如下命令:

$ git add . #跟踪文件并将文件添加到暂存区
$ git commit -m “提交信息”
$ git remote add origin git@gitlab.com:mingming/projectName.git(关联一个远程库)
$ git push -u origin master 

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。  

3.1.3 克隆远程仓库 

git clone git@gitlab.com:mingming/projectName.git(即:[url])  

3.2. 分支管理

3.2.1  svn和git 

SVN中的分支?

完全拷贝,与其他分支是不同的文件

实践中往往开发分支没有及时同步到主分支

结果:开发分支与主分支差异越来越大,以至于无法同步……

本地提交前须update,可能造成:本地代码正常,update后冲突,解决冲突时不小心覆盖了自己新加代码

Git分支

git保存的是快照

不同分支都是在同一份文件上,git保存不同版本快照

分支的迁移很容易 —— 改变“指针”指向

3.2.2 本地分支操作

基本命令:

1)查看分支:git branch

2)创建分支:git branch branch-name

3)切换分支:git checkout branch-name

4)创建并切换分支:git checkout -b branch-name

5)合并某分支到当前分支:git merge <要合并的分支name>

6)删除分支:git branch -d branch-name(对于未合并的分支,使用此命令无法删除,需要换成-D强制删除,但会丢失掉此分支所做的工作)。

7)哪些分支合并到当前分支:git branch --merged(反之,git branch --no-merged)

8)删除远程分支:git push origin --delete 远程分支。

基本上这个命令做的只是从服务器上移除这个指针。 Git 服务器通常会保留数据一段时间直到垃圾回收运行,所以如果不小心删除掉了,通常是很容易恢复的。

9)git提交历史查询:git log --graph --pretty=oneline --abbrev-commit。

3.2.3.分支合并

 

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

可以看到,不使用Fast forward模式,merge后就像这样:

3.3 关于版本回退

 

git reset --hard HEAD^或 git reset --hard 版本号(可回到任一个版本)

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

如何获得删除掉的版本号:

Git提供了一个命令git reflog用来记录你的每一次命令。

总结:

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

3.4 撤销修改

1. 存在两种情况 

1)一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

2)一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。 

2.处理办法:

1)对于第一种情况:

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销。

2)对于第二种情况:

用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区,git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

通过git reset HEAD <file>回到了第一种情况。

总结:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

3.5 删除文件

现在你有两个选择,一种是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit。

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- test.txt

 git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

3.6.git的暂存功能

 

场景

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。 

当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交。 

并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办? 

幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:  

$ git stashSaved working directory and index state WIP on dev: f52c633 add merge

现在,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。 

修复完成后,切换到master分支,并完成合并,最后删除issue-101分支。 

现在,是时候接着回到dev分支干活了! 

 

$ git checkout dev 

工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看: 

 

$ git stash liststash@{0}: WIP on dev: f52c633 add merge

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法: 

一种方式:用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除; 

另一种方式:用git stash pop,恢复的同时把stash内容也删了: 

 

$ git stash pop 
On branch dev 
Changes to be committed: 
 (use "git reset HEAD <file>..." to unstage) 
 new file: hello.py 
Changes not staged for commit: 
 (use "git add <file>..." to update what will be committed) 
 (use "git checkout -- <file>..." to discard changes in working directory) 
 modified: readme.txt 
Dropped refs/stash@{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)

再用git stash list查看,就看不到任何stash内容了: 

 

$ git stash list

 你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:$ git stash apply stash@{0} 

总结

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; 

 

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

3.7.多人协作

查看远程库信息,使用git remote -v; 

本地新建的分支如果不推送到远程,对其他人就是不可见的; 

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交; 

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致; 

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name; 

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突(手动处理)。

3.8关于标签 

3.8.1 创建标签

命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id; 

命令git tag -a <tagname> -m "blablabla..."可以指定标签信息; 

命令git tag可以查看所有标签。 

命令git push origin <tagname>可以推送一个本地标签; 

命令git push origin --tags可以推送全部未推送过的本地标签; 

命令git tag -d <tagname>可以删除一个本地标签。 

3.8.2 操作标签

命令git push origin <tagname>可以推送一个本地标签;

命令git push origin --tags可以推送全部未推送过的本地标签;

命令git tag -d <tagname>可以删除一个本地标签。

命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

第四章 git 删除远程仓库文件

第四章 git 删除远程仓库文件


     项目开发初期由于.gitignore 文件配置不正确很有可能导致某些不需要的目录上传到 git 远程仓库上了,这样会导致每个开发者提交的时候这些文件每次都会不同。除了一开始提交的时候注意配置好 .gitignore 文件外,我们也需要了解下出现这种问题后的解决办法。

具体操作步骤如下:

4.1  预览将要删除的文件

git rm -r -n --cached 文件/文件夹名称加上 
-n 这个参数,执行命令时,是不会删除任何文件,而是展示此命令要删除的文件列表预览。

4.2 确定无误后删除文件

git rm -r --cached 文件/文件夹名称

4.3 提交到本地并推送到远程服务

git commit -m "提交说明"
git push origin master

4.4 修改本地 .gitignore 文件 并提交

git commit -m "提交说明"
git push origin master

 

posted @   明明不平凡  阅读(1201)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示