Git基本操作流程 git常用操作详解
wptr33 2024-11-06 20:33 54 浏览
目录
- 技术背景
- 拷贝仓库
- 拉取仓库
- 提交更新
- 多次提交
- 变基
- 远程链接
- 提交PR
- 补充示例
- 修改编辑器
- 总结概要
- 版权声明
技术背景
Gitee是一款国内的git托管服务,对于国内用户较为友好,用户可以访问Gitee地址来创建自己的帐号和项目,并托管在Gitee平台上。既然是git的托管服务,那我们就可以先看看git的一些基本用法:
[dechin@dechin-manjaro ~]$ git --help
用法:git [--version] [--help] [-C <路径>] [-c <名称>=<取值>]
[--exec-path[=<路径>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<路径>] [--work-tree=<路径>] [--namespace=<名称>]
<命令> [<参数>]
这些是各种场合常见的 Git 命令:
开始一个工作区(参见:git help tutorial)
clone 克隆仓库到一个新目录
init 创建一个空的 Git 仓库或重新初始化一个已存在的仓库
在当前变更上工作(参见:git help everyday)
add 添加文件内容至索引
mv 移动或重命名一个文件、目录或符号链接
restore 恢复工作区文件
rm 从工作区和索引中删除文件
sparse-checkout 初始化及修改稀疏检出
检查历史和状态(参见:git help revisions)
bisect 通过二分查找定位引入 bug 的提交
diff 显示提交之间、提交和工作区之间等的差异
grep 输出和模式匹配的行
log 显示提交日志
show 显示各种类型的对象
status 显示工作区状态
扩展、标记和调校您的历史记录
branch 列出、创建或删除分支
commit 记录变更到仓库
merge 合并两个或更多开发历史
rebase 在另一个分支上重新应用提交
reset 重置当前 HEAD 到指定状态
switch 切换分支
tag 创建、列出、删除或校验一个 GPG 签名的标签对象
协同(参见:git help workflows)
fetch 从另外一个仓库下载对象和引用
pull 获取并整合另外的仓库或一个本地分支
push 更新远程引用和相关的对象
命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些概念帮助。
查看 'git help <命令>' 或 'git help <概念>' 以获取给定子命令或概念的
帮助。
有关系统的概述,查看 'git help git'。
如果git安装成功,就会有上述的执行反馈。我们可以在git命令行上进行操作,比如执行代码的提交等任务。
拷贝仓库
首先我们在Gitee上面创建好一个项目,或者我们可以查看其他已经创建好的项目的首页,一般是如下的形式:
我们可以点击这里的Fork,将该仓库fork到自己的帐号下。一般如果我们没有原仓库的developer权限的话,只能通过提交Pull Request来进行代码提交。因此操作逻辑变成了:先把代码仓Fork到自己的帐号下,在自己的帐号下进行修改,将Fork仓库的代码更新到源仓库代码中。Fork成功后可以在自己的帐号下看到这样的一个项目:
拉取仓库
在通过上一章节的方法拷贝了仓库到自己的帐号下之后,我们可以将该仓库下载到本地进行操作,使用git clone即可:
[dechin@dechin-manjaro 2021-quantum]$ git clone https://gitee.com/dechin/your_library.git
正克隆到 'your_library'...
Username for 'https://gitee.com': dechin
Password for 'https://dechin@gitee.com':
remote: Enumerating objects: 200, done.
remote: Counting objects: 100% (200/200), done.
remote: Compressing objects: 100% (113/113), done.
remote: Total 200 (delta 85), reused 200 (delta 85), pack-reused 0
接收对象中: 100% (200/200), 2.01 MiB | 433.00 KiB/s, 完成.
处理 delta 中: 100% (85/85), 完成.
下载仓库完成后,可以看到本地新建了一个名为your_library的目录,点击进去就是我们下载下来的仓库代码。
这里我们顺带介绍一下在本地用vim操作的一些简单技巧,比如显示行号及其效果图片:
:set nu
取消行号显示及其效果图片:
:set nonu
提交更新
在上一章节中我们介绍了如何将代码下载到本地,下载到本地之后我们可以使用各种的编辑器和IDE进行代码增加修改与测试。比如完成了某一项任务之后,修改了一个名为_circuit_level_count_test.py的文件,那我们就可以将这个代码文件用git add提交到远程仓库:
[dechin@dechin-manjaro tests]$ git add _circuit_level_count_test.py
为了使得代码库的历史更加明了,我们最好规范一下提交信息,比如下述示例介绍了一个案例,修复了#i3CDFM这个Issue,那么我们就可以将提交信息按照如下写法进行编写:
[dechin@dechin-manjaro tests]$ git commit -m 'Fix issue #i3CDFM'
作者身份未知
*** 请告诉我你是谁。
运行
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
来设置您账号的缺省身份标识。
如果仅在本仓库设置身份标识,则省略 --global 参数。
fatal: 无法自动探测邮件地址(得到 'dechin@dechin-manjaro.(none)')
一开始任务进行得不太顺利,按照提示中的说法,是因为我们没有配置帐号和邮箱,这里我们可以用提示的指令进行配置:
[dechin@dechin-manjaro tests]$ git config --global user.email "your_email@gmail.com"
[dechin@dechin-manjaro tests]$ git config --global user.name "dechin"
配置完基本信息之后,我们再次尝试代码提交信息的编写:
[dechin@dechin-manjaro tests]$ git commit -m 'Fix issue #i3CDFM'[master 591f9cf] Fix issue #i3CDFM
1 file changed, 2 insertions(+), 5 deletions(-)
在上述信息出现之后,就表示执行成功了,那么我们就可以进行远程代码提交了:
[dechin@dechin-manjaro tests]$ git push
Username for 'https://gitee.com': dechin
Password for 'https://dechin@gitee.com':
枚举对象中: 7, 完成.
对象计数中: 100% (7/7), 完成.
使用 8 个线程进行压缩
压缩对象中: 100% (4/4), 完成.
写入对象中: 100% (4/4), 411 字节 | 411.00 KiB/s, 完成.
总共 4(差异 3),复用 0(差异 0),包复用 0
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/dechin/your_library.git
6e345ad..591f9cf master -> master
提交过程中有可能要求我们输入Gitee平台的用户名和密码,我们按照提示进行输入即可。需要注意的是,如果提交的不是默认分支,最好可以指定一个分支进行提交,比如git push origin master。
多次提交
一般在一次特性提交的过程中,会涉及到不止一次的提交,我们也可以将这些提交同步刷新到同一个分支下,相关的操作都在上一章节中介绍过,这里我们仅简单展示一下这个流程:
[dechin@dechin-manjaro drivers]$ git add _save_molecule.py
[dechin@dechin-manjaro drivers]$ git commit -m 'Fix issue'
[master bff0b02] Fix issue
1 file changed, 3 insertions(+), 6 deletions(-)
[dechin@dechin-manjaro drivers]$ git push
Username for 'https://gitee.com': dechin
Password for 'https://dechin@gitee.com':
枚举对象中: 11, 完成.
对象计数中: 100% (11/11), 完成.
使用 8 个线程进行压缩
压缩对象中: 100% (5/5), 完成.
写入对象中: 100% (6/6), 526 字节 | 526.00 KiB/s, 完成.
总共 6(差异 4),复用 0(差异 0),包复用 0
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/dechin/your_library.git
591f9cf..bff0b02 master -> master
提交成功2次之后,我们可以用如下指令查看历史提交信息,这里的-n 5表示我们只查询最近的5条提交信息:
[dechin@dechin-manjaro your_library]$ git log --oneline --graph -n 5
* bff0b02 (HEAD -> master, origin/master, origin/HEAD) Fix issue
* 591f9cf Fix issue #i3CDFM
* 6e345ad update README.md.
* 591af5d update README.md.
* 664d276 modify the setup.py
这里编号bff0b02和编号591f9cf的commit就是我们刚才所更新的两条,我们还可以在这里看到commit的信息。
变基
在上一章节中,我们可以看到过往的2条commit实际上是在执行同一个任务,比如修复某一个issue。但是这里的commit信息却有2条,因为我们是分了2次来提交的,这显得提交的信息和内容非常的不简洁,变基(rebase)就是优化这个commit信息显示的方案,我们可以将过往的2条相同的提交记录合并成1条:
[dechin@dechin-manjaro your_library]$ git rebase --interactive HEAD~2
成功变基并更新 refs/heads/master。
这里省略了一些编辑的流程,实际上我们要进入到一个rebase的编辑界面,我们pick需要保留的commit。对于不需要保留的commit信息,我们可以直接将前面的pick改成fixup,然后删除后面的commit信息。变基执行完毕之后,需要强行push:
[dechin@dechin-manjaro your_library]$ git push --force
Username for 'https://gitee.com': dechin
Password for 'https://dechin@gitee.com':
枚举对象中: 15, 完成.
对象计数中: 100% (15/15), 完成.
使用 8 个线程进行压缩
压缩对象中: 100% (7/7), 完成.
写入对象中: 100% (8/8), 731 字节 | 731.00 KiB/s, 完成.
总共 8(差异 6),复用 0(差异 0),包复用 0
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/dechin/your_library.git
+ bff0b02...7ffc12a master -> master (forced update)
远程链接
我们可以使用git remote -v查看当前仓库的远程链接状态,如果要从我们Fork的仓库向原始仓库提交PR的话,就需要创建两者的链接。如果是链接未建立的情况,该命令的返回结果如下:
[dechin@dechin-manjaro your_library]$ git remote -v
origin https://gitee.com/dechin/your_library.git (fetch)
origin https://gitee.com/dechin/your_library.git (push)
这里只显示了Fork之后的仓库的地址,说明我们还没有跟原始仓库建立起链接,这时候需要执行upstream指令:
[dechin@dechin-manjaro your_library]$ git remote add upstream https://gitee.com/origin_library.git
此时再运行git remote -v,我们就可以看到新的远程链接:
[dechin@dechin-manjaro your_library]$ git remote -v
origin https://gitee.com/dechin/your_library.git (fetch)
origin https://gitee.com/dechin/your_library.git (push)
upstream https://gitee.com/origin_library.git (fetch)
upstream https://gitee.com/origin_library.git (push)
提交PR
在上述操作流程都结束后,我们可以准备在Gitee界面上直接提交Pull Request了。首先找到我们Fork过来的仓库:
点击新建Pull Request,选择源分支为我们Fork过来的分支,目标分支选择原始仓库中的目标分支,然后往下拉可以看到我们提交的更新内容,这里我们所有的提交内容被压成了一个commit:
最后提交PR,等待审批人审批即可。
补充示例
前面我们说到修改pick为fixup,但是缺少了一个示例图,这里重新再提交一个新的commit,来展示这个过程。首先我们执行rebase的时候会弹出这样的一个命令行界面:
这里可以直接编辑,因此我们将第二行,也就是我们需要合并的提交,修改为fixup,并且去掉了后面的commit信息:
最后同样的提交上去,我们可以在PR里面看到commit仍然只有一条信息,但是代码修改是有同步的。
这里也需要额外说明一下,在同一条PR未关闭的情况下,所有在源分支上的提交都会被同步到这个PR里面来。
修改编辑器
在上一章节中我们看到了一个很奇怪的编辑器,这是因为git默认的编辑器不是vim,但是我们可以手动将其配置为本地的vim编辑器。执行vim ~/.gitconfig编辑git的配置文件,我们发现在这个文件中已经有我们此前配置过的部分信息:
[user]
email = your_email@gmail.com
name = dechin
这里我们增加一个editor的配置即可使用vim来编辑git执行中的指令:
[user]
email = your_email@gmail.com
name = dechin
[core]
editor = /usr/bin/vim
如果坚持要使用原本的编辑器,那么在编辑结束之后,需要执行ctrl+X退出,选择Y选项保存修改,最后回车退出修改状态,同样也是可以的,只是使用vim对于大部分人来说会更加的顺手。
总结概要
在本文中我们通过一个实例来介绍了Git的基本用法,包括提交代码、远程链接以及变基等,这使得我们可以更美观更简洁的去维护我们自己的开源代码仓库。
版权声明
本文首发链接为:https://www.cnblogs.com/dechinphy/p/git.html
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/
- 上一篇:git 常用命令 git常用命令行
- 下一篇:「技术干货」Git的使用实践及常用命令
相关推荐
- [常用工具] git基础学习笔记_git工具有哪些
-
添加推送信息,-m=messagegitcommit-m“添加注释”查看状态...
- centos7安装部署gitlab_centos7安装git服务器
-
一、Gitlab介1.1gitlab信息GitLab是利用RubyonRails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。...
- 太高效了!玩了这么久的Linux,居然不知道这7个终端快捷键
-
作为Linux用户,大家肯定在Linux终端下敲过无数的命令。有的命令很短,比如:ls、cd、pwd之类,这种命令大家毫无压力。但是,有些命令就比较长了,比如:...
- 提高开发速度还能保证质量的10个小窍门
-
养成坏习惯真是分分钟的事儿,而养成好习惯却很难。我发现,把那些对我有用的习惯写下来,能让我坚持住已经花心思养成的好习惯。...
- 版本管理最好用的工具,你懂多少?
-
版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。...
- Git回退到某个版本_git回退到某个版本详细步骤
-
在开发过程,有时会遇到合并代码或者合并主分支代码导致自己分支代码冲突等问题,这时我们需要回退到某个commit_id版本1,查看所有历史版本,获取git的某个历史版本id...
- Kubernetes + Jenkins + Harbor 全景实战手册
-
Kubernetes+Jenkins+Harbor全景实战手册在现代企业级DevOps体系中,Kubernetes(K8s)、Jenkins和Harbor组成的CI/CD流水...
- git常用命令整理_git常见命令
-
一、Git仓库完整迁移完整迁移,就是指,不仅将所有代码移植到新的仓库,而且要保留所有的commit记录1.随便找个文件夹,从原地址克隆一份裸版本库...
- 第三章:Git分支管理(多人协作基础)
-
3.1分支基本概念分支是Git最强大的功能之一,它允许你在主线之外创建独立的开发线路,互不干扰。理解分支的工作原理是掌握Git的关键。核心概念:HEAD:指向当前分支的指针...
- 云效Codeup怎么创建分支并进行分支管理
-
云效Codeup怎么创建分支并进行分支管理,分支是为了将修改记录分叉备份保存,不受其他分支的影响,所以在同一个代码库里可以同时进行多个修改。创建仓库时,会自动创建Master分支作为默认分支,后续...
- git 如何删除本地和远程分支?_git怎么删除远程仓库
-
Git分支对于开发人员来说是一项强大的功能,但要维护干净的存储库,就需要知道如何删除过时的分支。本指南涵盖了您需要了解的有关本地和远程删除Git分支的所有信息。了解Git分支...
- git 实现一份代码push到两个git地址上
-
一直以来想把自己的博客代码托管到github和coding上想一次更改一次push两个地址一起更新今天有空查资料实践了下本博客的github地址coding的git地址如果是Gi...
- git操作:cherry-pick和rebase_git cherry-pick bad object
-
在编码中经常涉及到分支之间的代码同步问题,那就需要cherry-pick和rebase命令问题:如何将某个分支的多个commit合并到另一个分支,并在另一个分支只保留一个commit记录解答:假设有两...
- 模型文件硬塞进 Git,GitHub 直接打回原形:使用Git-LFS管理大文件
-
前言最近接手了一个计算机视觉项目代码是屎山就不说了,反正我也不看代码主要就是构建一下docker镜像,测试一下部署的兼容性这本来不难但是,国内服务器的网络环境实在是恶劣,需要配置各种镜像(dock...
- 防弹少年团田柾国《Euphoria》2周年 获世界实时趋势榜1位 恭喜呀
-
当天韩国时间凌晨3时左右,该曲在Twitter上以“2YearsWithEuphoria”的HashTag登上了世界趋势1位。在韩国推特实时趋势中,从上午开始到现在“Euphoria2岁”的Has...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
程序员的开源月刊《HelloGitHub》第 71 期
-
详细介绍一下Redis的Watch机制,可以利用Watch机制来做什么?
-
假如有100W个用户抢一张票,除了负载均衡办法,怎么支持高并发?
-
Java面试必考问题:什么是乐观锁与悲观锁
-
如何将AI助手接入微信(打开ai手机助手)
-
SparkSQL——DataFrame的创建与使用
-
redission YYDS spring boot redission 使用
-
一文带你了解Redis与Memcached? redis与memcached的区别
-
如何利用Redis进行事务处理呢? 如何利用redis进行事务处理呢英文
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)