• Git纯操作版 项目添加和提交、SSH keys添加、远程仓库控制、冲突解决、IDEA连接使用


    Git

    最近学原理学的快头秃了,特此想出点不讲原理的纯操作版,不过还是放个图吧
    在这里插入图片描述

    项目简单克隆

    git在本人日常中最重要的功能还是下载,所以先从下载开始讲起

    首先,创建一个文件,用来存放等会clone下来的项目,然后点击GitBash进行命令行操作

    image-20231014201004371

    之后 在git上找到你中意的项目,如图操作,复制链接

    image-20231014201455280

    git clone https://github.com/newbee-ltd/newbee-mall.git
    
    • 1

    之后就会看到他在clone你的项目到本地文件夹,当然你也可以直接Download zip然后解压:

    image-20231014201950862

    通用操作

    之后讲通用的,先配置用户名

    git config --global user.name “ ”
    git config --global user.email “ ”
    
    • 1
    • 2

    然后创建本地仓库

    git init
    
    • 1

    image-20231014202450942

    打开此选项,查看隐藏的文件夹:

    image-20231014202354230

    发现

    image-20231014202506496

    这个目录是一个隐藏目录,而当前目录就是我们的工作目录。

    创建成功后,我们可以查看一下当前的一个状态,输入:

    git status
    
    • 1

    如果已经成功配置为Git本地仓库,那么输入后可以看到:

    image-20231014202555762

    添加和提交

    接着我们来看看,如何使用git来管理我们文档的版本,我们创建一个文本文档,随便写入一点内容,接着查看状态:

    image-20231014203001178

    Untracked files是未追踪文件的意思,也就是说,如果一个文件处于未追踪状态,那么git不会记录它的变化,始终将其当做一个新创建的文件,这里我们将其添加到暂存区,那么它会自动变为被追踪状态:

    git add hello.txt #也可以 add . 一次性添加目录下所有的
    再次查看当前状态:
    
    • 1
    • 2

    image-20231014203047363

    现在文件名称的颜色变成了绿色,并且是处于Changes to be committed下面,因此,我们的hello.txt现在已经被添加到暂存区了。

    接着我们来尝试将其提交到Git本地仓库中,注意需要输入提交的描述以便后续查看,比如你这次提交修改了或是新增了哪些内容:

    git commit -m 'Hello World'
    
    • 1

    接着我们可以查看我们的提交记录:

    git log
    git log --graph
    
    • 1
    • 2

    image-20231014203205419

    我们还可以查看最近一次变更的详细内容:

    git show [也可以加上commit ID查看指定的提交记录]
    
    • 1

    image-20231014203245890

    接着我们可以尝试修改一下我们的文本文档,由于当前文件已经是被追踪状态,那么git会去跟踪它的变化,如果说文件发生了修改,那么我们再次查看状态会得到下面的结果:

    image-20231014203336465

    也就是说现在此文件是处于已修改状态,我们如果修改好了,就可以提交我们的新版本到本地仓库中:

    git add .
    git commit -m 'Modify Text'
    
    • 1
    • 2

    接着我们来查询一下提交记录,可以看到一共有两次提交记录。

    image-20231014203406056

    我们可以创建一个.gitignore文件来确定一个文件忽略列表,如果忽略列表中的文件存在且不是被追踪状态,那么git不会对其进行任何检查

    回滚

    当我们想要回退到过去的版本时,就可以执行回滚操作,执行后,可以将工作空间的内容恢复到指定提交的状态:

    git reset --hard commitID
    
    • 1

    执行后,会直接重置为那个时候的状态。再次查看提交日志,我们发现之后的日志全部消失了。

    那么要是现在我又想回去呢?我们可以通过查看所有分支的所有操作记录:

    git reflog
    
    • 1

    这样就能找到之前的commitID,再次重置即可。

    分支

    分支就像我们树上的一个树枝一样,它们可能一开始的时候是同一根树枝,但是长着长着就开始分道扬镳了,这就是分支。我们的代码也是这样,可能一开始写基础功能的时候使用的是单个分支,但是某一天我们希望基于这些基础的功能,把我们的项目做成两个不同方向的项目,比如一个方向做Web网站,另一个方向做游戏服务端。

    因此,我们可以在一个主干上分出N个分支,分别对多个分支的代码进行维护。

    创建分支
    我们可以通过以下命令来查看当前仓库中存在的分支:

    git branch
    
    • 1

    我们发现,默认情况下是有一个master分支的,并且我们使用的也是master分支,一般情况下master分支都是正式版本的更新,而其他分支一般是开发中才频繁更新的。我们接着来基于当前分支创建一个新的分支:

    git branch test
    
    • 1

    删除分支

    git branch -d test1
    
    • 1

    现在我们修改一下文件,提交,再查看一下提交日志:

    git commit -a -m 'branch master commit'
    
    • 1

    通过添加-a来自动将未放入暂存区的已修改文件放入暂存区并执行提交操作。查看日志,我们发现现在我们的提交只生效于master分支,而新创建的分支并没有发生修改。

    将分支切换到另一个分支:

    git checkout test
    
    • 1

    我们会发现,文件变成了此分支创建的时的状态,也就是说,在不同分支下我们的文件内容是相互隔离的。

    我们现在再来提交一次变更,会发现它只生效在yyds分支上。我们可以看看当前的分支状态:

    git log --all --graph
    
    • 1

    合并分支
    我们也可以将两个分支更新的内容最终合并到同一个分支上,我们先切换回主分支:

    git checkout test1
    
    • 1

    接着使用分支合并命令:

    git merge test
    
    • 1

    会得到如下提示:

    image-20231014204015620

    在合并过程中产生了冲突,因为两个分支都对hello.txt文件进行了修改,那么现在要合并在一起,到底保留谁的hello文件呢?

    我们可以查看一下是哪里发生了冲突:

    git diff
    
    • 1

    因此,现在我们将master分支的版本回退到修改hello.txt之前或是直接修改为最新版本的内容,这样就不会有冲突了,接着再执行一次合并操作,现在两个分支成功合并为同一个分支。

    变基分支

    除了直接合并分支以外,我们还可以进行变基操作,它跟合并不同,合并是分支回到主干的过程,而变基是直接修改分支开始的位置,比如我们希望将yyds变基到master上,那么yyds会将分支起点移动到master最后一次提交位置:

    git rebase master
    
    • 1

    变基后,yyds分支相当于同步了此前master分支的全部提交。

    优选

    我们还可以选择其将他分支上的提交作用于当前分支上,这种操作称为cherrypick:

    git cherry-pick <commit id>:单独合并一个提交
    
    • 1

    这里我们在master分支上创建一个新的文件,提交此次更新,接着通过cherry-pick的方式将此次更新作用于test分支上。

    远程项目推送

    认证

    首先我们需要一个认证

    ssh-keygen -t rsa
    cat ~/.ssh/github.pub #需要替换
    
    • 1
    • 2

    打开所在目录,复制 .pub文件中的所有内容,之后添加ssh key

    image-20231014205630057

    git commit -a -m 'Modify files'
    git log --all --oneline --graph
    git push origin master 
    git log --all --oneline --graph
    
    • 1
    • 2
    • 3
    • 4

    推送成功

    image-20231014210356602

    主页也看到了

    image-20231014210255108

    也可以远端绑定分支

    git push --set-upstream origin master:master
    git push origin
    
    • 1
    • 2

    抓取、拉取和冲突解决

    如果出现多个本地仓库对应一个远程仓库的情况下,比如一个团队里面,N个人都在使用同一个远程仓库,但是他们各自只负责编写和推送自己业务部分的代码,也就是我们常说的协同工作,那么这个时候,我们就需要协调。
    如果出现进度不一样,这时就需要进行pull操作,获取远程仓库中最新的提交:

    git fetch 远程仓库 #抓取:只获取但不合并远端分支,后面需要我们手动合并才能提交
    git pull 远程仓库 #拉取:获取+合并
    
    • 1
    • 2

    之后可能会出现冲突,例如:

    To https://github.com/xx/xxx.git
     ! [rejected]        master -> master (fetch first)
    error: failed to push some refs to 'https://github.com/xx/xxx.git'
    hint: Updates were rejected because the remote contains work that you do
    hint: not have locally. This is usually caused by another repository pushing
    hint: to the same ref. You may want to first integrate the remote changes
    hint: (e.g., 'git pull ...') before pushing again.
    hint: See the 'Note about fast-forwards' in 'git push --help' for details.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    一旦一个本地仓库推送了代码,那么另一个本地仓库的推送会被拒绝,原因是当前文件已经被其他的推送给修改了,我们这边相当于是另一个版本,和之前两个分支合并一样,产生了冲突,因此我们只能去解决冲突问题。

    如果远程仓库中的提交和本地仓库中的提交没有去编写同一个文件,那么就可以直接拉取:

    git pull 远程仓库
    
    • 1

    拉取后会自动进行合并,合并完成之后我们再提交即可。

    但是如果两次提交都修改了同一个文件,那么就会遇到和多分支合并一样的情况,在合并时会产生冲突,这时就需要我们自己去解决冲突了。

    IEDA类软件连接

    以下使用GoLand作为范例,IDEA也大差不差

    image-20231014212254226

    之后登陆账户

    image-20231014212554925
    之后就可以提交了,命令都大差不差

    image-20231014212911393
    操作到这里就结束了,有兴趣的可以去了解了解原理

  • 相关阅读:
    epoll机制 对比 select、poll机制的优势
    质量是企业的生命,如何破解质量管控难题?质量管理系统推荐
    三部曲深剖C++类与对象——下篇
    uniapp 对video视频组件嵌套倍速按钮
    [NOIP2007 提高组] 树网的核
    设有一个由正整数组成的无序单链表,编写完成一以下功能的算法
    让 K8s 更简单!8款你不得不知的 AI 工具-Part 1
    济南数字孪生赋能工业制造,加速推进制造业数字化转型
    Fabric.js 修改画布交互方式到底有什么用?
    FFMpeg AVFrame 的概念.
  • 原文地址:https://blog.csdn.net/m0_73976305/article/details/133831393