生物信息基础:实用Git命令,掌握这些就够了

我发现有搞了几年生信的朋友还不会用Github管理代码,这不免令人意外。我一直强调基础知识的重要性,而这些知识又是可以在短时间内掌握的。Github管理平时写的代码,要用到Git命令。虽然官方Git命令非常多,但我们只要掌握常用的几个能干活就好了。

作为半个IT人,写代码是工作日常,如何进行代码版本控制及托管,本文介绍一下我的最佳实践,其实很容易。

工作或学习过程中写的代码,存在本地的话容易丢失,也不方便与他人进行交流。

我一般把代码托管在Github网站上,这样既解决了代码备份问题,又方便与他人进行交流。

有人可能会问,如果我只想托管代码,不愿意让别人看到呢?有办法,Github上的代码仓库分为公开和私有两种,公开的所有人都可以访问,私有的只有自己才能访问。

之前私有仓库是收费的,需要绑定一张能支付美元的信用卡进行扣费,我记得一年大概是400多接近500元人民币,这不便宜,也难住了一些没信用卡的用户。

不过自从微软收购Github后,私有仓库免费了,感谢微软。

一、基本用法

要利用Github来托管代码,就要先学习一下Git语法。关于Git语法的学习,那真是多了去了,够写几本书。但实际上本人这么多年实践下来,其实最常用的就几个命令。

我的工作流程一般是这样的:

  1. 在Github上创建项目仓库:先填写仓库的名字(Repository name*,必须),然后填写项目描述(Description,可选),其次“Add a README file”复选框打钩,点击“Create repository”

  2. 将仓库clone到本地,如git clone git@github.com:jianzuoyi/learngit.git

  3. 代码编写,查看工作区状态,git status

  4. 将代码添加到暂存区git add <file>, <file>是文件名,git add .代表添加当前目录的所有修改到暂存区

  5. 提交修改,git commit -m <comment>,<comment>表示给本次提交添加一个注释,最好认真填写,以便将来知道本次提交到底做了什么修改

  6. git push,代码推送到远程仓库,至此就完成了简单的代码版本控制和远程托管,非常简单

可见,git常用的命令也就是:

git clone
git status
git add
git commit
git push

当代码仓库已经存在于本地,要继续工作时,先git pull将远程仓库的最新版本拉到本地,修改后再git statusgit addgit commitgit push

熟练掌握这几个命令,已经能应付80%的工作需求了,这也符合二八法则,即掌握20%的命令,完成80%的工作,其他命令需要时再去查。

下面我们再来简单介绍一下Git进行版本控制的三个核心概念:工作区、暂存区和版本库。

  1. 工作区(Working Directory),即工作目录,就是项目文件所在的目录,如learngit。

  2. 暂存区(stage,或者index),故名思义,暂存工作区的文件修改,git add <file>就是将文件提交到暂存区

  3. 版本库(Repository),工作区中一个隐藏的.git目录,即是Git版本库,它记录了项目文件的所有修改记录,通过版本库,你可以随时将文件的内容恢复成之前的某个版本

这里解释一下,为什么要在版本库与工作区之间增加一个暂存区呢,其实是有必要的。比如你一个文件修改了一大段内容,下面又要对这一大段内容进行修改,但是你又怕改错,这时候不妨git add <file>暂存一下,然后继续修改,如果要保存最新的修改结果,则再次git add <file>覆盖掉暂存区的内容,如果你改错了,则可以把文件恢复到暂存区中的状态。

暂存区的好处就是能够多次暂存,最后一次提交到版本库,这样能保证版本库的整洁,不至于那么混乱,试想你每做一点小的修改,就往版本库中提交一次,没有必要。

理解了工作区、暂存区和版本库的概念,那么平时工作,用到的相应命令也就好理解了。

  1. 本地还没有代码库,从远程仓库克隆一个到本地git clone

  2. 本地已经有代码库,修改代码之前先git pull与远程代码库同步

  3. 当我敲了一会代码,想看下工作区的状态,用git status

  4. 我想看下某个文件修改了哪些内容,git diff <file>,这个命令用于查看工作区的文件与暂存区的(如果有的话)或版本库中的对比

  5. 当我觉得需要暂存一下工作内容了,用git add

  6. 完成了修改,用git commit提交到代码库

  7. 我想查看现在的版本库情况,git reflog,或者git log --pretty=oneline

二、版本回退

以上介绍的都是工作一帆风顺的情形,但是有些时候,我们发现文件修改错了,想退回到修改前的版本,这要分多情况。

情况1:工作区修改了,还没add到暂存区,需要放弃修改,直接恢复为版本库中的版本

git checkout -- <file>

情况2:工作区修改了,已经add到暂存区,又再次修改了,需要恢复成暂存区的版本

git checkout -- <file> # 将工作区的内容恢复为最近的版本:暂存区的(如果有的话)或版本库中的

情况3:工作区修改了,已经add到暂存区,还没commit,需要恢复成版本库中的版本

git restore --staged <file>
git checkout -- <file>
# 分两步,先撤销暂存,再回到最新版本。如果不先撤销暂存,只checkout,则只会恢复成用暂存区

情况4:工作区修改了,已经commit到版本库,需要恢复成commit前的版本

git reset HEAD^ <file>  # 将上一个版本库中的内容放入暂存区
git checkout -- <file>  # 从暂存区恢复到工作区

情况5:在版本之间切换

git reset --hard HEAD^  # HEAD^, HEAD^^, HEAD~3
git reset --hard commit_id  # 在任意版本之间切换

HEAD指向的版本就是当前版本,Git允许在任意版本之间切换

三、远程仓库

版本管理的最佳实践就是先创建远程仓库,再克隆到本地进行修改,然后push到远程仓库。

但是有些时候代码已经存在本地了,需要将其推送到远程仓库,我通常是这样做的:

  1. 在Github上创建项目仓库:先填写仓库的名字(Repository name*,必须),然后填写项目描述(Description,可选),点击“Create repository”,注意”Initialize this repository with:“下面的几个复选框都不要选,直接点“Create repository”

  2. 这样会在弹出的页面中显示如下命令
    echo "# learngit" >> README.md
    git init
    git add README.md
    git commit -m "first commit"
    git branch -M main
    git remote add origin git@github.com:jianzuoyi/learngit.git
    git push -u origin main

  3. 切换到本地的代码目录,运行上述命令,就可以在当前目录创建代码仓库,并与远程仓库进行关联

四、分支管理

分支的作用:当一个功能还没开发完成时就提交代码,不完整的代码库会导致程序不能正常工作。如果等完成了再提交,又存在丢失每天进度的风险。

有了分支,就可以等开发完毕后一次性合并到原来的分支上。

查看分支:git branch

创建分支:git branch <name>

切换分支:git switch <name>或者git checkout <name>

创建+切换分支:git switch -c <name>或者git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

查看分支合并图:git log --graph --pretty=oneline --abbrev-commit

五、解决冲突

有时候从远程库pull时,可能会存在冲突,因为Git是一个分布式管理系统,你在公司电脑上有一份克隆,修改提交后push到了Github,然后你家里电脑也有一份克隆,当你要继续进行工作时,需要先运行git pull命令同步Github的最新版本,发现本地仓库已经有了更新,这时可能就会出现合并冲突。

这时你可以:

git stash,暂时清空工作区
git pull,执行合并
git stash pop,弹出暂存的工作区内容
git status,查看工作区状态
git diff <file>,查看具体文件的修改,从而决定是否用新版本,如果要保存新版本,则执行`git add, git commit`流程
git checkout -- <file>,如果要放弃文件的修改,则执行此命令

掌握以上这些命令,基本上就够用了。

关于简说基因

  • 生信平台

    简说基因创建了Galaxy中国社区(UseGalaxy.cn),致力于将生信分析都迁到云上。Galaxy中国为所有用户提供免费服务,热情欢迎广大生物医学研究者使用。

  • 生信培训

    简说基因的生信培训班,荣获学员的一致好评。如果你也对生物信息学感兴趣,欢迎来跟简说基因,学真生信

  • 生信分析

    我们能够承接所有 NGS 组学数据分析业务,包括但不限于 WGS / WES / RNA-seq 等。基因组组装、注释,以及各种重测序业务都可以与简说基因合作。

0bd1460079a205572cd26f6914c78ac9.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/164063.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初始ProtoBuf

目录​​​​​​​ ⼀、初识ProtoBuf 1. 序列化概念 2. ProtoBuf是什么 3. ProtoBuf的使用特点 ⼆、安装ProtoBuf 1、ProtoBuf在window下的安装 2、ProtoBuf在Linux下的安装 ⼀、初识ProtoBuf 1. 序列化概念 序列化和反序列化 序列化&#xff1a;把对象转换为字节序列…

037、目标检测-SSD实现

之——简单实现 目录 之——简单实现 杂谈 正文 1.类别预测层 2.边界框预测 3.多尺度输出联结做预测&#xff08;提高预测效率&#xff09; 4.多尺度实现 5.基本网络块 6.完整模型 杂谈 原理查看&#xff1a;037、目标检测-算法速览-CSDN博客 正文 1.类别预测层 类别…

Elasticsearch中的语义检索

一、传统检索的背景痛点 和传统的基于关键词的匹配方式不同&#xff0c;语义检索&#xff0c;利用大模型&#xff0c;将文本内容映射到神经网络空间&#xff0c;最终记忆token做检索。 例如想要搜索中国首都&#xff0c;例如数据集中&#xff0c;只有一篇文章在描述北京&#x…

斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语)

假设函数定义 假设函数&#xff0c;猜一个 x->y 的类型&#xff0c;比如 y ax b&#xff0c;随后监督学习的任务就是找到误差最低的 a 和 b 参数 有时候我们可以定义 x0 1&#xff0c;来让假设函数的整个表达式一致统一 如上图是机器学习中的一些术语 额外的符号&#xf…

【Spring Boot 源码学习】Banner 信息打印流程

Spring Boot 源码学习系列 Banner 信息打印流程 引言往期内容主要内容1. printBanner 方法2. 关闭 Banner 信息打印3. SpringApplicationBannerPrinter 类3.1 LOG 模式打印3.1.1 getBanner 方法3.1.1.1 新建 Banners3.1.1.2 添加 ImageBanner3.1.1.3 添加 ResourceBanner3.1.1.…

宏--offsetof使用

文章目录 宏介绍结构体测试代码运行结果 宏介绍 宏--offsetof(type, member)&#xff0c;type就是结构的类型&#xff0c;member就是需要的成员名。表达式的结果是一个size_t的值&#xff0c;表示这个指定成员开始存储的位置距离结构开始存储的位置偏移几个字节结构体 typede…

Django自动生成docs接口文档

1.创建Django项目 python manage.py startproject django20252.创建子应用 python manage.py startapp api3.安装依赖包 pip install coreapi4.创建urls.py from django.contrib import admin from django.urls import path, include from rest_framework import routers f…

网络运维与网络安全 学习笔记2023.11.19

网络运维与网络安全 学习笔记 第二十天 今日目标 STP工作原理、STP高级配置、MSTP工作原理 MSTP配置案例、MSTP负载均衡 STP工作原理 单点故障 PC之间的互通链路仅仅存在1个 任何一个设备或链路出现问题&#xff0c;PC之间都会无法通信 解决方案 增加冗余/备份设备 增加冗…

PCL 计算一条射线与一个三角形的交点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里我们使用点向式分别表示一个射线与一个三角形,如下图所示: 其中,平面的法向量 N N N可以由三角形两条边的叉乘来计算,点R0到平面的法向距离

数学建模值TOPSIS法及代码

TOPSIS法 TOPSIS法简称为优劣距离解法&#xff0c;是一种常见法综合评价方法&#xff0c;其能充分利用原始数据的信息&#xff0c;其结果能精确地反映各个评价方案之间的差距。 模型介绍 上篇文章谈到的层次分析法是有局限性的。比如评价的决策层不能太多&#xff0c;太多的…

脚本(JavaScript)-练手-简单的随机音乐播放器

浅浅的写个简单的随机音乐播放脚本(可移动)&#xff0c;注释很详细&#xff0c;直接上源码 效果&#xff1a; // UserScript // name 播放音乐脚本 // namespace 代码对我眨眼睛 // version 1.2 // description 在API上请求音乐链接并随机自动连续播放音乐&…

【MySQL--->事务】

文章目录 [TOC](文章目录) 一、基本概念二、事务的操作1.设置全局事务隔离级别2.设置事务提交方式3.事务操作 三、事务隔离性1.隔离性概念2 .隔离级别设置 四、MVCC多版本控制2. read view 一、基本概念 事务是由若干条具有逻辑相关性的SQL语句组成的,用来完成某种任务的**逻辑…

使用 C 语言快速排序将字符串按照 ASCII 码升序排列

示例代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h>static Comp(const void *a, const void *b) {char *pa (char *)a;char *pb (char *)b;return strcmp(a, b); }int main(void) {char strs[3][10] { "bd", &q…

SpringBoot 整合 JdbcTemplate

数据持久化有几个常见的方案&#xff0c;有 Spring 自带的 JdbcTemplate 、有 MyBatis&#xff0c;还有 JPA&#xff0c;在这些方案中&#xff0c;最简单的就是 Spring 自带的 JdbcTemplate 了&#xff0c;这个东西虽然没有 MyBatis 那么方便&#xff0c;但是比起最开始的 Jdbc…

关于爬虫中的hook(defineProperty,hook cookies, hook载荷数据,hookXHR)

关于爬虫中的hook&#xff1a; defineProperty var people {age: 19, }; var count20; console.log(people.age) // 参数&#xff1a;对象 属性名字 函数 Object.defineProperty(people, age, {get: function () {console.log(获取值&#xff01;);return count;},// set: …

C++ map和set的使用

关联式容器 vector、list、deque统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;存储的是元素本身 侧重于单纯的存储数据 关联式容器也是用来存储数据的&#xff0c;里面存储的是<key, value>结构的键值对&#xff0c;在数据检索时比序列式…

漫谈广告机制设计 | 万剑归宗:聊聊广告机制设计与收入提升的秘密(2)

书接上文漫谈广告机制设计 | 万剑归宗&#xff1a;聊聊广告机制设计与收入提升的秘密&#xff08;1&#xff09;&#xff0c;我们谈到流量作为一种有限资源&#xff0c;其分配方式&#xff08;或者交易方式&#xff09;也经历了几个阶段&#xff1a;第一个是谈判定价阶段&#…

新材料工厂生产管理mes系统

万界星空科技新材料云MES系统从需求分析、产品选型、系统集成、可扩展性和灵活性以及安全性和稳定性等多个角度进行考虑。 如果您的企业也属于新材料生产制造行业&#xff0c;同时也计划通过MES系统来进行整个生产过程的数字化管控。 欢迎搜索万界星空科技线上咨询或者直接拨…

论文阅读:JINA EMBEDDINGS: A Novel Set of High-Performance Sentence Embedding Models

Abstract JINA EMBEDINGS构成了一组高性能的句子嵌入模型&#xff0c;擅长将文本输入转换为数字表示&#xff0c;捕捉文本的语义。这些模型在密集检索和语义文本相似性等应用中表现出色。文章详细介绍了JINA EMBEDINGS的开发&#xff0c;从创建高质量的成对&#xff08;pairwi…

搭建网关服务器实现DHCP自动分配、HTTP服务和免密登录

目录 一. 实验要求 二. 实验准备 三. 实验过程 1. 网关服务器新建网卡并改为仅主机模式 2. 修改新建网卡IP配置文件并重启服务 3. 搭建网关服务器的dhcp服务 4. 修改server2网卡配置文件重启服务并效验 5. 设置主机1的网络连接为仅主机模式 6. 给server2和网关服务器之…