【持续更新】Github实用命令

devtools/2024/12/23 9:21:19/

Intro

最近高强度使用github,遂小计于此作为备忘。

Basic

github是一个代码管理软件,能够track文件变动并且管理版本,是当代coding必不可少的工具。当你安装好github在本地以后,你可以通过以下命令初始化当前文件夹(假设是/WorkingSpace)的github管理

cd WorkingSpace 
git init

此时/WorkingSpace下会创建一个隐藏文件夹.git,它负责储存所有有关github的内容。
在初始化之后,当前的仓库并没有track任何文件。运行以下命令将file加入track列表中

git add file

正如linux的文件操作,你可以使用.来代表当前文件夹下的所有文件,通过以下操作你可以一键加入当前文件夹下的所有文件

git add .

但是在复杂仓库的管理时切忌直接使用以上命令,很容易track很多无意义的文件,导致不必要的冗余与开销。你可以创建.gitignore文件在/WorkingSpace下,直接将忽略的文件写在.gitignore中,每个文件一行,如

file

每一次git add操作会将文件放入缓存区,使用git commit将当前缓存区的内容记录为一个新的版本

git commit -m "This is your commit message."

每一次commit都有对应的ID,你可以通过reset命令回到某个历史的版本中

git reset XXXXXXXXXXXXXXXXX

此类reset为soft reset,只会改变当前的版本号,并不会改变本地的文件。
推荐使用VS Code的github功能,你可以直观地使用进行管理、查看版本号。VS Code在此命令后会显示旧版本与本地文件的区别。

你还可以使用hard reset改变本地的代码(本地代码将强制更改为某个版本的代码,很难找回!!!)。

git reset --hard XXXXXXXXXXXXXXXXX

你还可以使用HEAD表示当前最新的版本号,这个命令可以帮助你快速清空缓存区。

git reset --hard HEAD

事已至此你成功维护了本地的github仓库。

照着github的Create Repository,你可以创建一个线上的github仓库,便于备份与合作。你也可以直接clone一个远程仓库到本地

git clone git@github.com:UserName/RepoName.git
git clone https://github.com/UserName/RepoName.git

你可以用pull将线上拉取到本地,用push将本地更新到线上

git pull
git push

由于git的要求,你必须从当前git的最新版本进行更新,再push,否则你需要先与最新的版本进行手动的commit。由于这个特性更多时候版本更新是线性的,在最后再merge起来。

Merge:你可以使用git pull拉取远程仓库,此时相同的文件将会存在本地和远程两个版本,你需要逐行确认保留远程版本还是本地版本(在VS Code上)。

你也可以使用hard命令强制覆盖Remote仓库(非常危险,很难找回!!!)

git push --hard

Branch

获取当前Local与Remote的Branch list.

git branch -a 

从remote上新建分支(LocalBranch的名字尽量与RemoteBranch名字相同,否则有可能会出现问题)

git checkout -b LocalBranch origin/RemoteBranch

切换至LocalBranch(需先将缓存区清空,如git reset --hard HEAD

git checkout LocalBranch

同一份代码也可以有不同的remote repo,你可以将本地仓库与某个远程仓库绑定,你可以用这个方法clone别人的代码并维护一个属于自己的仓库

git remote set-url origin git@github.com:UserName/RepoName.git

当remote的branch信息更新时,本地需要额外的fetch进行更新(prune会删除remote中不存在的branch)

git fetch --prune

你可以使用-d删除本地分支(-D为不顾及是否merge强制删除)

git branch -d LocalBranch

Bug

fatal: The current branch main has multiple upstream branches, refusing to push.
  • 原因是当前branch在push的时候不知道自己的上游是什么,没有关联起来。使用--set-upstream将本地LocalBranch与远程的RemoteBranch关联起来。
git push --set-upstream LocalBranch RemoteBranch

当使用git branch -a时,会输出

* mainremotes/origin/main

这意味着--set-upstream的姿势应该是

git push --set-upstream origin main

http://www.ppmy.cn/devtools/144649.html

相关文章

【蓝桥杯每日一题】扫描游戏——线段树

扫描游戏 蓝桥杯每日一题 2024-12-13 扫描游戏 线段树 模拟 题目大意 有一根围绕原点 O 顺时针旋转的棒 O A OA OA ,初始时指向正上方 (Y 轴正向)。 在平面中有若干物件, 第 i 个物件的坐标为 ( x i , y i ) (x_i,y_i) (xi​,yi​), 价值为 z i z_i zi​ 。当棒扫到某个 物件…

uni-app开发商品分类页面实现

目录 一:功能概述 二:功能实现 一:功能概述 这里商品分类按照常规的分类页面样式设计,左侧为一级分类,右侧为二级分类。在左侧切换不同的一级分类可以修改右侧的二级分类数据。右侧的展现方式是最上面显示对应的一级分类logo图片,下面展示二级分类的logo和名称。 二:…

MFC/C++学习系列之简单记录13

MFC/C学习系列之简单记录13 前言memsetList Control代码注意 总结 前言 今天记录一下memset和List control 的使用吧! memset memset通常在初始化变量或清空内存区域的时候使用,可以对变量设定特定的值。 使用: 头文件: C&#…

获取显示器(主/副屏)友好名称(FriendlyName)

在开发涉及多显示器的应用程序时,获取显示器的友好名称(Friendly Name)是一个常见需求。本文将深入探讨GetMonitorFriendlyName 方法,了解其实现细节和工作原理。 方法签名 public static string GetMonitorFriendlyName(bool i…

Debian 10上使用UFW设置防火墙

介绍 UFW或Uncomplicated Firewall是iptables一个接口,旨在简化配置防火墙的过程。 虽然iptables是一个可靠而灵活的工具,但初学者很难学会如何使用它来正确配置防火墙。 如果您希望开始保护网络并且不确定使用哪种工具,UFW可能是您的正确选…

构建全面的生产监控体系:从基础设施到业务服务

在现代 IT 系统中,监控体系是确保高可用性、高性能和稳定性的核心工具。一个完善的监控体系能够及时发现系统问题、分析问题根源并快速采取应对措施,避免故障进一步扩散。本文将从基础设施层、中间件层、容器与编排层、应用与服务层逐步展开,…

每天40分玩转Django:实操在线商城

实操在线商城 一、今日学习内容概述 模块重要程度主要内容商品模型⭐⭐⭐⭐⭐商品信息、分类管理购物车系统⭐⭐⭐⭐⭐购物车功能实现订单系统⭐⭐⭐⭐⭐订单处理、支付集成用户中心⭐⭐⭐⭐订单管理、个人信息 二、模型设计 # models.py from django.db import models fro…

CSS3 实现火焰-小火苗效果

创建 CSS3 火焰效果可以通过组合 CSS 动画、伪元素 和 渐变 来实现。以下是一个简单的实现步骤&#xff0c;展示如何制作动态火焰效果 1. HTML 结构 我们只需要一个简单的 div 容器&#xff1a; <div class"fire"></div>2. CSS 实现 基础样式 使用 …