4 Star 5 Fork 2

深圳北理莫斯科大学RoboMaster北极熊战队/技术知识库

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
Git的使用.md 21.27 KB
一键复制 编辑 原始数据 按行查看 历史

Git的使用

  • 关于git的一些使用操作介绍,如有补充,欢迎提出。
  • 关于GitHub的相关部分存放于第二知识库

关于Gitee

  • Gitee是一个基于Git的代码托管和协作平台,类似于GitHub。它提供了一个云端的代码仓库,使开发者能够轻松地将他们的代码存储在一个中央位置,并与团队成员进行协作。

  • 在使用Gitee之前我们基本上属于是横向版本控制,即打好多个压缩包,每个压缩包中的文件是一个版本的代码,通过这种方式来控制不同的版本。

    1. 这种方式很占本地内存,且在团队协作时的相互传递过程比较麻烦,通常需要微信等中间媒介来传输。
    2. 对于每一版的具体改动信息没有记录,难以比对修改的部分以发现一些相关问题。
  • Gitee上的版本控制属于纵向版本控制,即通过时间线上的提交记录来控制版本,其网络关系图如下几张显示。

    1. 将文件转存到了云端,减少本地存储的负担,团队协作时需要哪一版的文件直接到对应版本中下载即可。
    2. 每版改动的部分都有对应的记录ComparisonView,可以非常方便的查询修改部分并找到问题所在。
    3. 提交信息的使用使的每次提交的版本实现了什么非常直观易懂。

WarehouseNetworkDiagram_1 WarehouseNetworkDiagram_2

git中的关系以及命令

graph LR
远程仓库 --pull--> 本地仓库
远程仓库 --clone--> 本地仓库
本地仓库 --push--> 远程仓库

远程仓库'<--pull request-->远程仓库

本地仓库 -.- 暂存区
暂存区 --reset--> 内容
内容 -- add --> 暂存区
暂存区 --commit--> 本地仓库

目录

鉴于内容比较多,请优先看提交自己写的代码到仓库上多人合作部分的内容。其他部分作为补充,可以有用到的时候再看

安装Git

  1. 下载Git
    下载主页
    Windows上传到Gitee上的安装包
    Ubuntu
  2. 按照默认设置安装

从远程仓库获取文件

  • 获取整个仓库
    1. 在本地文件夹打开命令行
    2. 克隆远程仓库到本地 git clone 远程仓库的.git链接

基于VSCode的代码合作

请先安装VSCode插件-Git系列

0.设置基本信息

  1. 打开VSCode

    ChooseBranch

  2. 点击左下角 Git Graph 打开 Git Graph 视图

    GitGraph

  3. User Details中设置用户信息,在Remote Configuration中设置远程仓库的链接。

    UserSetting

1.选择分支

ChooseBranch

  1. 点击下红框中的箭头打开分支选择窗口
  2. 在选择窗口(上红框)中选择自己工作的分支
  3. 在橙色区域可以直接的看到目前工作的分支(上传代码前一定要注意选择的是哪个分支)
  4. 点击橙色区域的环形按钮可以拉取远程仓库中的最新内容

2.提交代码

!!强烈推荐完成一个功能就提交一次记录,并附上规范易懂的提交消息!!

2.1.填写commit

EditCommit

  1. 点击红色框框中的猫猫头选择提交类型
  2. 在橙色框框中选择提交类型
  3. 根据提示一个个项目填写下来就可以了

2.2.提交

将修改的内容提交到本地仓库中

Submit

  1. 提交所有内容

    • 直接点击 蓝色提交按钮 就可以将所有修改内容提交到本地仓库中
  2. 提交修改的内容

    1. 点击 绿色框框 中的加号将更改内容添加到暂存区中
    2. 再点击 蓝色提交按钮 就会只提交红色框框中的内容到本地仓库中

3.同步仓库

Push

  • 点击图中蓝色按钮即可将本地仓库的内容同步到远程仓库

4.合并冲突

  • 当合并代码发生冲突时,VSCode会在弹出弹窗提醒,点击后可以跳转到对应文件。

    Merge

  • 点击右下角蓝色在合并编辑器中解析按钮后可以跳到合并视图中,这个视图会显示发生冲突的位置,方便我们合并内容

    Merge

  • 此时可以选择接受传入的内容或者接受当前内容。但如果两种内容中都有需要保留的内容,此时可以手动编辑,将上面两个窗口中要保存的内容粘贴到下面窗口中。

  • 合并完成后点击右下角蓝色完成合并按钮




基于Pull Request的功能合并

1.Fork仓库到自己的空间

点击Fork按钮Fork仓库到自己的空间

Fork

2.合并开发内容到主分支

NewPR

  • 点击 +Pull Request 以创建一个PR

NewPR2

  • 将红框框中的源分支更换为 当前的开发分支目标分支替换为master分支
  • 给这次PR填写一个合适的标题
  • 在PR模板中填写这次改动的综述,方便后续版本回溯的时候快速抓住版本开发的重点(这部分可以先在本地markdown编辑器中编辑好后在粘贴进来)
  • 在绿框框中的提交记录中可以看到这个分支中的所有提交记录
  • 在绿框框中的文件改动中可以浏览这个功能开发的时候都进行了什么改动
  • 侧边的优先级标签关联issue里程碑根据情况选择具体内容。
  • 点击创建Pull Request即可完成创建

3.处理合并冲突(管理员)

在合作时不免会遇到对同一个文件的修改,而在多人修改时就容易产生一些代码冲突,在提交 pull request 合并代码时就会标红如下图;

MergePR1

通常一些简单的合并gitee会帮我们自动完成,但遇到复杂问题的时候就需要我们手动处理了。

3.1.拉取目标分支和源分支

将目标分支和源分支都拉取到本地

  1. 点击左下角红标按钮进入分支选择页面,点击即可选择分支并且如果本地没有该分支会自动拉取内容。

    MergePR2

  2. 通过第一步将目标分支和源分支都拉到本地

  3. 最好再将分支和远程仓库同步一下

3.2.在本地处理冲突

  1. 将当前工作分支设置为目标分支,在BRANCHS目录中右键源分支并选择 Merge Branch into Current Branch

    MergePR3

  2. 选择 Merge 选项

    MergePR4

  3. 可以看到左边出现了merge提示,并且在 合并更改 中列出了待处理的冲突文件。

    MergePR5

  4. 点击需要合并的文件会显示冲突内容,不过这个视图并不适合处理合并内容。点击右下角在合并编辑器中解析打开合并视图。

    MergePR6

  5. 在黄色冲突区域选择接受左边的或者右边的内容,但是如果2边都有内容合并的话就需要手动将需要的内容复制到下方黄色区域(框框)中

    MergePR7

  6. 处理完成后点击 完成合并,和远程分支同步一下

    MergePR8

  7. 再回到 Pull request 我们发现现在不存在冲突了,可以直接合并。

    MergePR9

3.3.分支间无相同历史问题

如果遇到报错:

fatal: refusing to merge unrelated histories

MergePR10

则表明合并的2个分支不存在共同的历史,但是正常的合并时2个分支应当有共同的历史。

我认为这次出现的问题是一种罕见的情况,只发生在刚创建存储库时。

  • 解决:
  • 使用--allow-unrelated-histories命令
    git merge --allow-unrelated-histories origin/master
    

然后就可以继续合并了

















基于命令行操作

提交自己写的代码到仓库上

  1. 在本地仓库文件夹打开Git bash(或命令行)
  2. 配置本地用户信息(已配置过请忽略):
    git config --global user.name "gitee用户名"
    git config --global user.email "gitee绑定的邮箱"
    
  3. 链接远程仓库(已配置过请忽略):
    git remote add origin <remote-url>
    
  4. 拉取仓库内容
    git pull 远程仓库的.git链接
    
  5. 添加代码到本地缓存仓库
    git add .
    
  6. 提交操作
    git commit -m "修改内容简述"
    
  7. 推送操作
    git push
    
    若是本地仓库连接到远程仓库后的第一次推送请使用命令
    git push -u origin master
    

注:文件夹的名字随便起,和仓库名称无关

多人合作

  • 作为一个团队,我们不可能只有一个人在修改相关代码和文档,该部分介绍了在团队合作时可能遇到的一些问题以及解决方案。

  • !!!强烈建议每次修改代码前先拉取一下远程仓库中的代码!!!

版本冲突

  • 如果远程仓库中的版本与本地版本更新记录不一致(不在同一时间线上),则会拒绝提交,并显示error

    FailedToPush

    此时需要先拉取一下远程仓库中的文件并参考合并文件的相关操作


合并文件

  • 在拉取远程仓库的文件时如果拉取的文件和本地新版本的文件没有冲突,则可能会跳出一个MERGE_MSG,并显示在vscode窗口中(其他情况不太了解),接受即可,当然,也可以写一下合并消息来描述目的

    如果在拉取时远程仓库版本与本地在同一时间线上,则会直接覆盖本地文件


  • 如果拉取的文件和本地文件有冲突,则会在命令行显示

    CONFLICT (content): Merge confTict in README.md
    Automatic merge failed; fix conflicts and then commit the result
    

    PullConflict

    此时应当打开有冲突的文件,并选择保留哪一种更改。

    ChooseChanges

gitignore文件

  • 在本地修改项目时,出于调试的需要可能会产生一些与源文件无关紧要的文件和文件夹,但是我们又不需要推送到远程仓库中。此时我们可以用 .gitignore 文件来在版本更新的时候忽略掉这些文件和文件夹。
  • 合理的使用 .gitignore 文件可以有效减少推送和拉取文件时的文件量以提高速度。

gitignore的使用

首先,在根目录下创建一个.gitignore文件,然后在文件中以行为单位,每行写一个要忽略的文件或文件夹匹配语句,具体参照以下几种常见的语句:

  • bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
  • /bin: 忽略根目录下的bin文件
  • /*.c: 忽略 cat.c,不忽略 build/cat.c
  • debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
  • **/foo: 忽略/foo, a/foo, a/b/foo等
  • a/**/b: 忽略a/b, a/x/b, a/x/y/b等
  • !/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
  • *.log: 忽略所有 .log 文件
  • config.php: 忽略当前路径的 config.php 文件

gitignore语法

  • 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
  • 开头的文件标识注释,可以使用反斜杠进行转义
  • ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
  • / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
  • / 开始的模式匹配项目跟目录
  • 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
  • ** 匹配多级目录,可在开始,中间,结束
  • ? 通用匹配单个字符
  • * 通用匹配零个或多个字符
  • [] 通用匹配单个字符列表

gitignore不起作用

  • 有时候我们会发现写了.gitignore文件,但上传之后那些文件依然还在。
  • 这是因为.gitignore只对还没被追踪的文件起作用,想要把已经被追踪的文件也ignore的话,请先将相关文件删除,然后再提交这版没有那些文件的版本。之后.gitignore就可以起作用啦

基本代码

初始化仓库

  • git init
    

连接到远程仓库

  • git remote add origin <remote-url>
    
  • 其中<remote-url>为要连接到的远程仓库的URL(形如https://xxx.git

如何更改连接的远程仓库

新方法

  1. 一键更改
    git remote set-url origin 你仓库的git/sshURL
    

老方法

  1. 查看当前远程仓库的设置

    git remote -v
    
  2. 移除当前远程仓库

    git remote remove origin
    
  3. 添加新的远程仓库

    git remote add origin <remote-url>
    

    其中<remote-url>为要连接到的远程仓库的URL(形如https://xxx.git

修改本地配置

  1. 检查本地配置的用户名和邮箱
    git config --list
    
  2. 配置用户名和邮箱
    git config --global user.name "gitee用户名"
    git config --global user.email "gitee绑定的邮箱"
    

配置以显示中文

  • 一般git中中文显示都是乱码转义符,若要显示出中文字符,进行以下配置:
    git config --global core.quotepath false
    

添加代码到本地缓存仓库

  • git add .
    

提交操作

  • git commit -m "<修改内容简述>"
    
  • 其中 "<修改内容简述>" 改为提交的修改内容简述

拉取操作

  • 拉取远程仓库中的最新版文件合并到本地历史记录中
    git pull 远程仓库的git链接
    

克隆操作

  • 克隆完整的远程仓库到本地
    git clone 远程仓库的git链接
    

推送操作

  • git push
    
  • 如需强制覆盖仓库,输入( [ ] 中的内容选填,其中<branch-name>为分支名)
    git push -f [origin <branch-name>]
    
    (不能随便使用,一定要得到相关人员的许可后再使用)

版本控制

本地仓库

查看提交历史
  • 查看提交历史,获取要回退到的目标版本的提交哈希值(commit hash),使用以下指令
    git log
    
回退整个仓库的版本
  • 使用回退命令来回退版本(默认混合重置):
    git reset
    
  • 有几个选项可供选择:
    • 软重置(soft reset):回退到指定版本,保留修改的文件,将这些修改标记为未提交的更改。命令为:
    git reset --soft <commit-hash>
    
    • 混合重置(mixed reset):回退到指定版本,保留修改的文件,但将这些修改标记为已修改但未暂存的更改。命令为:
    git reset --mixed <commit-hash>
    
    • 硬重置(hard reset):回退到指定版本,并丢弃所有修改的文件。这是一个危险的操作,慎用。命令为:
    git reset --hard <commit-hash>
    
    请将 <commit-hash> 替换为你要回退到的目标版本的提交哈希值。

注意:回退版本会修改你的提交历史,请确保在执行重置操作之前备份你的代码。

请注意,这些命令会修改你的本地代码库,如果你已经将代码推送到远程仓库,需要谨慎处理以避免引起不一致。

回退单个文件的版本
  • 如果你只想回退单个文件而不是整个提交,请使用命令:
    git checkout <commit-hash> -- <file-path>
    
  • <commit-hash> 替换为目标版本的提交哈希值,<file-path> 替换为要恢复的文件路径。

请注意,这些命令会修改你的本地代码库,如果你已经将代码推送到远程仓库,需要谨慎处理以避免引起不一致。

远程仓库

本部分内容还未进行过尝试,先添加以防未来有需要

在 GitHub 或 Gitee 上实现版本回退,通常会涉及到以下几个步骤:

  1. 克隆仓库

    • 在你的本地机器上,使用 git clone 命令将远程仓库克隆到本地。
    git clone <远程仓库地址>
    
  2. 查看历史提交

    • 使用 git log 命令可以查看提交历史,获取提交的哈希值。
    git log
    
  3. 切换到要回退的版本

    • 使用 git checkout 命令,切换到你想要回退到的版本。
    git checkout <commit的哈希值>
    

    或者,你也可以使用相对引用,比如相对当前版本的前一个版本:

    git checkout HEAD~1
    
  4. 创建新的分支(可选)

    • 如果你想保留当前状态,可以创建一个新的分支来存储这个版本。
    git branch 新分支名
    git checkout 新分支名
    
  5. 推送到远程仓库(如果需要):

    • 如果你想将回退后的版本推送到远程仓库,使用 git push 命令。
    git push origin 新分支名
    

    或者,如果你在主分支上进行了回退,可以使用强制推送:

    git push -f origin 主分支名
    

请注意,强制推送可能会导致一些问题,因此请确保你了解可能产生的后果,特别是在团队协作的情况下。

需要注意的是,这个操作会将远程仓库的历史记录更改为你回退后的版本,因此请确保你的操作是经过慎重考虑的。

Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/SMBU-POLARBEAR/Technical_Knowledge_Base.git
git@gitee.com:SMBU-POLARBEAR/Technical_Knowledge_Base.git
SMBU-POLARBEAR
Technical_Knowledge_Base
技术知识库
master

搜索帮助