常用指令

比较分支

方法 检查内容 是否检查提交历史 是否快速
git diff branch1 branch2 ✅ 文件内容 ❌ 不检查历史 中等
git log branch1..branch2 ❌ 内容 ✅ 历史提交 中等
git rev-parse ❌ 内容,检查同一提交 ✅ 非常快
git diff --quiet ✅ 文件内容 ✅ 脚本化方便

ChatGPT


克隆的那些事

命令 下载的历史 本地创建的当前分支 实际拉取内容理解
git clone repo.git 所有分支历史 默认分支(main或master) 所有分支历史 + 默认分支
git clone -b dev repo.git 所有分支历史 dev 所有分支历史 + dev 分支
git clone -b dev --single-branch repo.git dev 分支历史 dev 只拉 dev 分支
git clone -b dev --single-branch --depth 1 repo.git dev 最新提交 dev 只拉 dev 分支 + 最新提交

较全面

注释 指令 注释 指令
克隆仓库 git clone 地址 克隆分支 git clone -b [branch_name] 地址
-- 克隆指定分支(节省体积) git clone -b <branch-name> --single-branch <repository-url>
正常删除 git branch -d [branch_name] 强制删除 git branch -D [branch_name]
删除远程分支 git push origin --delete [branch_name] 拉取本分支 git pull
拉取指定分支 git pull origin [branch_name] 拉取并创建分支 1 git remote update origin --prune
推送到远程分支上 2 git push 将分支推送到远程仓库 3 git push -u origin [branch_name]
查看分支状态 git status 查看本地所有分支 git branch
合并本地分支 4 git merge [branch_name] 创建本地分支 git branch [branch_name]
创建并切换分支 git checkout -b [branch_name] 切换本地分支 git checkout [branch_name]
提交到暂存区 git add . 提交到本地仓库 git commit -m '说明内容'
查看版本 git --version 配置邮箱 git config --global user.email 'xxx.com'
配置用户名 git config --global user.name 'xx' 查看配置信息 git config --list
删除配置信息 5 git config --global --unset user.email 初始化本地仓库 git init
查看本分支的历史记录 6 git log 所有记录在同一行显示 6 git log --oneline
查看所有历史记录 git log --oneline --decorate --graph --all 配置 git config --global alias.mjAllLog log --oneline --decorate --graph --all
查看所有分支的最后一次提交 git branch -v 组合指令 7 git commit -a -m "提交说明"
存储 git stash 查看存储 git stash list
不携带参数启用存储 8 git stash apply 携带参数启用存储 9 git stash apply [stash@{2}]
简单删除存储 git stash drop [stash@{2}] 启用并删除存储 git stash pop [stash@{2}]
撤回工作区 git checkout -- <filename> 查看暂存区 git ls-files -s
查看暂存区对应文件的内容 10 git cat-file -p [对象名] 撤回暂存版本 git reset HEAD <FILE>
撤回暂存文件 git reset HEAD test.txt 撤回提交 11 git commit --amend
查看整个项目的所有历史操作 git reflog 强制覆盖远程分支 12 git push origin [branchName] -f
拉取远程所有的最新分支,并且自动创建本地分支 13 git remote update origin --prune 退出Git的vim编辑器 14 . . .
克隆分支 git remote add origin 地址 克隆分支 git clone -b [branch_name] 地址
在项目中配置单独的Git信息 git config user.name 'name'/git config user.email 'email' 最新一次提交和上一次提交的比较 git diff HEAD^ HEAD
在当前分支时重命名分支名 git branch -m [newName] 不在当前分支时重命名分支名 git branch -m [oldName] [newName]

一份代码多分支同步

本地单分支通过 Git multi-refspec push,将同一 commit 同步推送至多个远程分支,实现多环境分支镜像更新。


一、本质原理(先讲清楚)

Git push 的语法是:git push <remote> <本地分支>:<远程分支>
所以可以将本地 main 同时推到远程 dev、test、release


二、最直接的做法(推荐)

方法 1:一条命令推多个分支

git push origin main:main main:dev main:test main:release
git push origin main:dev main:test main:release

含义

本地 远程
main dev
main test
main release

方法 2:逐个 push(更安全)

git push origin main:dev
git push origin main:test
git push origin main:release

更清晰
出错更容易定位
企业项目更常用


三、关键注意点(很重要)

可能会被拒绝(non-fast-forward)
如果远程分支你本地“新”,会报:rejected (non-fast-forward)
解决方式:git push -f origin main:dev
强制推送会覆盖远程历史,要谨慎


本质不是“同步分支”
不是绑定关系
不是自动同步
只是“复制提交内容”


更合理的场景
多环境部署(dev / test / prod)
临时同步代码
单仓多环境分支管理


长期维护的场景
用 CI/CD + 单主分支策略
或 Git Flow / GitHub Flow


四、更高级玩法(可选)

push 所有本地分支到远程(危险)

git push origin --all

会把本地所有分支都推到远程


tag 一起推

git push origin --tags

把本地所有标签(tags)一次性全部推送到远程仓库 origin


核心区别

命令 推送内容
git push origin --all 所有分支(branches)
git push origin --tags 所有标签(tags)

本地重置远程仓库信息

1、查看远程仓库信息
git remote -v


2、查看远程仓库详细信息
git remote show origin


3、查看远程分支列表
git ls-remote


4、查看远程分支列表
git ls-remote --heads origin


5、查看当前分支跟踪的远程分支
git branch -v


6、删除现有的远程仓库
git remote remove origin


7、绑定添加远程仓库
git remote add origin https://gitee.com/your_username/your_repo.git


8、编辑/修改/更换远程仓库
git remote set-url origin https://gitee.com/new_username/new_repo.git


9、首次推送本地分支到远程仓库
git push -u origin you_branch


10、强行推送本地分支到远程分支
git push --force origin you_branch


合并或更新代码的步骤

假设目前有两个分支,分别是dev与mj01
假设现在处于mj01分支上
第一步:在本地mj01分支上推送代码到远程mj01分支中
第二步:在本地mj01分支上切换到本地dev分支上
第三步:在本地dev分支上拉取远程dev分支
第四步:如果本地dev分支与拉取的远程dev分支的代码有冲突,则解决冲突
第五步:在本地dev分支上推送代码到远程dev分支中
第六步:在本地dev分支上拉取远程mj01分支
第七步:如果本地的dev分支与拉取的远程mj01分支的代码有冲突,则解决冲突
第八步:在本地dev分支上推送代码到远程dev分支中
第九步:在本地dev分支上切换到本地mj01分支上
第十步:在本地mj01上拉取远程dev分支


本地仓库提交到远程仓库、强制合并分支、remote、checkout、reset、origin、init

本地初始化Git

git init

git init之后最好往仓库加点内容。加好内容后git add .=>git commit -m '第一次推送至远程仓库'


创建远程仓库

一定要创建空仓库,就是仓库里面什么都没有,也不要初始化。

null


链接远程仓库

git remote add origin https://gitee.com/mj/test-null.git

把本地仓库提交到远程仓库中

git push -u origin master

这一步可能会不成功,原因是远程仓库不为空。


解决方法一

git push origin develop:master -f

develop分支强制推送合并至master分支。


解决方法二
切换分支至master分支。

git checkout master

并将master分支重置为develop

git reset --hard develop 

将重置后的master分支强制推送更新。

git push origin master --force

相当于删除master分支,test将其覆盖,并推送远程仓库。


ssh与https地址之间的切换、设置免密码访问服务器

1、查看当前属于什么地址的命令

git remote -v

如果当前处于ssh状态下会输出一下内容。

origin  git@gitee.com:mssj200224/open-resources.git (fetch)
origin  git@gitee.com:mssj200224/open-resources.git (push)

如果当前处于https状态下会输出一下内容。

origin  https://git@gitee.com:mssj200224/open-resources.git (fetch)
origin  https://git@gitee.com:mssj200224/open-resources.git (push)

2、从ssh切换至https

 git remote set-url origin https://git@gitee.com:mssj200224/open-resources.git

origin后面是远程仓库的https地址。


3、从https切换至ssh

git remote set-url origin git@gitee.com:mssj200224/open-resources.git

origin后面是远程仓库ssh地址。


4、设置密码
默认15分钟

git config --global credential.helper cache

自己定义时间,一小时后失效

git config credential.helper 'cache --timeout=3600'

永久存储密码

git config --global credential.helper store

什么是版本控制?

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。


为什么要使用版本控制?

●版本控制可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。就算乱来一气把整个项目中的文件改的改删的删,照样可以轻松恢复到原先的样子。但额外增加的工作量却微乎其微。
●可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等。


集中化版本控制系统(SVN)

svn因为每次存的都是差异,需要的硬盘空间会相对的小一点,可是回滚的速度会很慢。


优点

代码存放在单一的服务器上,便于项目的管理。

缺点

服务器宕机 : 员工写的代码得不到保障。
服务器炸了 : 整个项目的历史记录都会丢失。


集中化的版本控制系统


分布式版本控制系统(Git)

git每次存的都是项目的完整快照,需要的硬盘空间会相对大一点。Git团队对代码做了极致的压缩,最终需要的实际空间比svn多不了太多,可是Git的回滚速度极快。


优点

完全的分布式。

缺点

学习起来比SVN陡峭。


分布式版本控制系统


基础的Linux命令

清除屏幕

clear

往控制台输出信息,相当于JavaScript中的打印

echo 'testText'

创建文件

echo 'testText' > test.txt

touch test.txt

vim test.txt

将当前目录下的子文件&子目录平铺在控制台

ll

将对应目录下的子孙文件&子孙目录平铺在控制台

find ./

将对应目录下的文件平铺在控制台

find ./ -type f

find test -type f

删除文件

rm test.txt

重命名

mv file.txt test.txt

查看对应文件的内容

cat test.txt

打开编辑器

vim test.txt

操作步骤

●按i进插入模式,可对文件编辑
●按esc键进入命令行模式
●在命令行中首先按:
●:后面跟着对应的命令


命令

q! : 强制退出,且不保存
wq : 保存退出
set nu : 设置行号


Git目录解释

hooks : 目录包含客户端或服务端的钩子脚本
info : 包含一个全局性排除文件
logs : 保存日志信息
objects : 目录存储所有数据内容
refs : 目录存储指向数据的提交对象的指针(分支)
config : 文件包含项目特有的配置选项
description : 用来显示对仓库的描述信息
HEAD : 文件指示目前被检出的分支
index : 文件保存暂存区信息



  1. 拉取远程指定分支,并且在本地自动创建分支。

    ↩︎
  2. 将本地的分支推送到远程分支上,确保远程仓库由此分支。

    ↩︎
  3. 此操作会将本地分支推送到远程仓库中,并且会自动在远程仓库创建此分支。
    此命令在一个分支上只能执行一次,多次操作会报错。
    执行此命令的前提是远程仓库没有此分支,一开始此分支只存在本地仓库。

    ↩︎
  4. 当本地有多个分支时,在自己分支上把其它本地分支合并到自己的分支上。

    ↩︎
  5. 博客园-原文

    ↩︎
  6. 在提交了若干更新,又或者克隆了某个项目之后,可以回顾提交历史。默认不用任何参数的话,git log会按提交时间列出所有的更新,最近的更新排在最上面。

    ↩︎ ↩︎
  7. 合并git add .git commit -m指令
    此命令在使用之前一定要有git add .过一次才行。

    ↩︎
  8. 默认会启用最近(最新)的存储。

    ↩︎
  9. 这各参数可以通过git stash list来获取,是个列表。

    ↩︎
  10. 这里的对象名就是git ls-files -s查询出来的值。

    ↩︎
  11. 功能是重新写注释,都是重新提交一次,只不过错误的注释不再出现。此命令会进入注释编辑窗口,进入窗口后按i进入编辑状态,改完注释后按esc后进输入命令窗口接着输入wq保存退,也可以q!不保存强制退出。

    ↩︎
  12. 使用场景
    回退后,重新push会报错,意思是当前版本低于远程版本,无法提交。此时可以使用此命令解决。

    ↩︎
  13. 此操作会创建本地分支,分支能正常切换,但是执行git branch没有发现有远程分支显示。

    ↩︎
  14. ☺方式一
    第一步
    Esc退回插入模式
    第二步
    :q:退出编辑器
    :q!:强制退出且不保存
    :wq:保存后并退出
    :wq!:强制保存且后退出
    ☺☺方式二
    按住Esc键不放,再按两次大写的Z

    ↩︎
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐