git随记

git status 查看文件状态

git status -s 比较简洁的查看文件状态。如下代表此文件是新建的,没有被git跟踪的文件:

$ git status -s
?? abc.txt

git add abc.txt 将abc添加到暂存区。后再次git status -s

$ git status -s
A  abc.txt

git reset 将暂存区的文件取消暂存。后再次git status -s ,暂存区的文件会变为未跟踪

git commit 将暂存区的文件修改提交到本地仓库。git commit -m "abc" abc.txt ,再次查看状态就没了。

git rm abc.txt 删除本地工作区里的文件,其实本地仓库里仍然还有这个文件,此时git push origin HEAD:dev 仍然能提交至远程仓库。

git rm abc.txt
git status
deleted:    abc.txt

查看远程仓库

$ git remote
origin

添加远程仓库,用于向本地仓库添加一个新的远程仓库引用(通常是一个 URL)。这样,你就可以从该远程仓库拉取(fetch)或推送(push)更改。
运行 git remote add < shortname> < url> 添加一个新的远程 Git 仓库,同时指定一个可以引用的简写

git remote add myRemote http://xxx.xxx.1xx.226:906x/cc/haizhou.git

$ git remote -v
myRemote        http://xx.xx.xx.226:9066/cc/haizhou.git (fetch)
myRemote        http://xx.xx.xx.226:9066/cc/haizhou.git (push)
origin  http://xx.xx.xx.226:9066/cc/haizhou.git (fetch)
origin  http://xx.xx.xx.226:9066/cc/haizhou.git (push)

移除无效的远程仓库

 git remote rm myRemote

从远程仓库中抓取与拉取
git fetch 是从远程仓库获取最新版本到本地仓库,不会自动merge

git pull 是从远程仓库获取最新版本并merge到本地仓库

**注意:**如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull命令后加入参数–allow-unrelated-histories
当执行git中的“git pull origin master –allow-unrelated-histories”命令时,会出现“ couldn’t find remote ref –allow-unrelated-histories”的错误,
输入如下命令即可解决:
git pull --rebase origin master

将本地分支与远程分支关联:

git branch --set-upstream-to origin/master master

推送到远程仓库
当你想分享你的代码时,可以将其推送到远程仓库。 命令形式:git push [remote-name] [branch-name]

git push origin HEAD:dev

这个命令的含义是将当前分支(HEAD)的内容推送到远程的 dev 分支。这里的 HEAD:dev 是一个引用规范(refspec),它告诉 Git 从 HEAD(即当前分支)获取内容,并将其推送到远程的 dev 分支。这个命令非常有用,特别是当你想要将一个分支的内容推送到另一个远程分支时,而这两个分支在本地可能有不同的名称。

如果你想要将本地的 main 分支推送到远程仓库的 main 分支上,你可以执行以下命令:

git push origin main

如果你想要将本地的 feature-branch 分支推送到远程仓库的 develop 分支上(注意这里分支名不同),你可以使用引用规范(refspec)来指定:

git push origin feature-branch:develop

查看分支

  • 列出所有本地分支
    git branch
  • 列出所有远程分支
    git branch -r
  • 列出所有本地分支和远程分支
    git branch -a
$ git branch -r
  origin/HEAD -> origin/main
  origin/dev
  origin/main
-----------------------------
$ git branch
  main
* origin/dev
-----------------------------
$ git branch -a
  main
* origin/dev
  remotes/origin/HEAD -> origin/main
  remotes/origin/dev
  remotes/origin/main

origin/HEAD -> origin/main 

表示远程仓库 origin 的 HEAD 当前指向 main 分支。这意味着当你从 origin 拉取代码时,默认情况下会拉取 main 分支的更新。

 创建分支

在主分支上:

$ git branch myBranch

$ git branch
* main
  myBranch
  origin/dev

引用远程分支:

#先看远程分支上有啥分支,看之前可以git pull一下
$ git branch -r
  origin/HEAD -> origin/main
  origin/dev
  origin/hello
  origin/main
  origin/myBranch

#这条命令会创建一个名为 hello 的新本地分支,并将其设置为跟踪 origin/hello。之后你就可以在这个新的本地分支上进行工作,并通过 git push 和 git pull 与远程的 dev 分支同步更改。
#然后创建一个远程分支的引用 如:
#-b: 这个参数表示“branch”(分支),并告诉 git checkout 命令你想要创建一个新的分支。
$ git checkout -b hello origin/hello
Switched to a new branch 'hello'
Branch 'hello' set up to track remote branch 'hello' from 'origin'.

$ git branch
* hello
  main
  myBranch
  origin/dev

#远程分支可以多次被引用 只需要本地分支名字不一样就行
$ git checkout -b MyHello origin/hello
Switched to a new branch 'MyHello'
Branch 'MyHello' set up to track remote branch 'hello' from 'origin'.

切换分支:

#只是单独的切换本地分支
$ git checkout myBranch
Switched to branch 'myBranch'

# 创建本地分支 且引用远程分支时候也会切换
$ git checkout -b dev origin/dev

引用本地分支:

git checkout -b haizhou_dev main

注意如下两种写法:
git checkout -b hello master:
这个命令会基于 master 分支来创建一个名为 hello 的新分支,并立即切换到这个新分支 hello。也就是说,hello 分支会包含 master 分支在那一刻的所有提交历史,并且你将会在新的 hello 分支上开始工作。
git checkout -b hello:
这个命令会基于当前所在的分支(无论这个分支是什么)来创建一个名为 hello 的新分支,并立即切换到这个新分支。例如,如果你当前在 feature-x 分支上,那么 hello 分支就会包含 feature-x 分支在那一刻的所有提交历史,并且你将会在新的 hello 分支上开始工作。
简单来说,master 在第一个命令中指定了新分支的起始点(即基于哪个分支来创建新分支),而在第二个命令中,起始点是隐式的,即当前所在的分支。

推送至远程仓库分支

$ git push origin myBranch
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: To create a merge request for myBranch, visit:
remote:   http://xxxxxxxx:9066/cc/haizhou/-/merge_requests/new?merge_request%5Bsource_branch%5D=myBranch
remote:
To http://116.63.139.226:9066/dongbinbin/haizhou.git
 * [new branch]      myBranch -> myBranch

删除分支

#删除本地分支
$ git branch -d hello
Deleted branch hello (was 14109a7).

#删除远程分支
$ git push origin --delete hello
To http://xxxxxx.06:9066/cc/haizhou.git
 - [deleted]         hello

#注意,删除本地分支的时候,如果本地分支引用了远程分支还没merged,会报如下提示:
$ git branch -d MyHello
warning: deleting branch 'MyHello' that has been merged to
         'refs/remotes/origin/hello', but not yet merged to HEAD.
Deleted branch MyHello (was 3ffe4d3).

分支合并merge,本地分支间的合并:

比如,我在本地分支MyHello开发完一个功能后,先要把MyHello合并到本地的master分支,然后再推到远程仓库。先从MyHello分支切换到master分支,使用checkout命令,接下来用merge命令来进行分支间的合并。

#git merge 用于合并分支的更改。
#git push 用于将本地的更改推送到远程仓库。

#切换到主分支
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.


#将MyHello合并到主分支
$ git merge MyHello
Updating 18c5cd7..14109a7
Fast-forward
 hello.txt | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hello.txt

#主分支提交到远程
$ git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To http://xxxxxxx:9066/cc/haizhou.git
   18c5cd7..14109a7  main -> main


git如何解决merge冲突?

 假如有一个主分支master,上面有个文件 a.txt 。

1.主分支编辑a.txt内容第一行加上一行master 1,并提交这个分支。

2.在此分支上git checkout -b new_branch为master做一个新分支(这个命令会让new_branch拥有master分支在那一刻的所有提交历史,并且你将会在新的 new_branch 分支上开始工作),然后我们编辑这个a.txt,第二行写上文字new branch 1,然后也对a.txt进行提交。

3.我们再次切换至master分支,再次编辑这个a.txt, 此时master分支上仍然还只有一行,我们同样在a.txt第二行写上文字master 2。

4.那么此时,master分支的第二行和new_branch的第二行就冲突了,如果我们想在master分支去合并new_branch分支,这时候会报分支冲突。

那我们应该怎么处理呢?首先,我们在master分支上打开这个文件,然后保留主分支master和子分支new_branch需要合并的内容,然后对这个文件进行提交就行了。如果我们在合并分支的时候发现冲突了,我们此时不想进行合并,那么我们只需要执行git merge --abort 就会撤销此次合并。因为如果我们不撤销冲突的话, 我们没法切换别的分支。

还有一种情况没法切换分支,如果当前我们的代码已经做了修改,我们放任不管去切换别的分支也是没法切换的,此时我们可以使用 git stash 将它们暂存(stash)起来,以确保在切换分支时不会丢失这些更改,或者是我们先把修改的代码进行提交。如果你不想保留对 a.txt 的本地更改,并且想要简单地丢弃它们以便切换分支,你可以这样做git checkout -- a.txt  ,这会恢复 a.txt 文件到上次提交的状态  。

如果遇到冲突了,我们感觉自己改动的那部分代码不重要,如果我们想先合并被人的代码到自己的分支怎么办呢?可以使用这个命令:git checkout --theirs <file>  也就是接受人家的,自己的放弃不要了,不过你得确认自己的变动的部分真的不想要了。

对于meger:

  • 特点
    • Git会自动尝试合并两个分支的代码。
    • 如果合并过程中有冲突,需要手动解决冲突并提交修改后的代码。
    • Merge会创建一个合并提交,保留了分支的整个历史记录。

合并代码还有另外一种方式Rebase

Rebase可以将当前分支的代码rebase到其他分支上,实现合并的效果。比如将new_branch上的a.txt合并到主分支master上。在git图上就是没有分叉了,变成一条线了

  • 特点
    • Git会将目标分支(如master)的提交应用到当前分支(如feature)上。
    • 然后将当前分支(feature)移动到目标分支(master)的最新提交之后。
    • 如果合并过程中有冲突,同样需要手动解决冲突并提交修改后的代码。
    • Rebase能保持提交的线性,更适合在提交历史较为清晰时使用。

总结

  • mergerebase都是Git中用于合并代码的方式,但它们在处理合并的方式和结果上有所不同。
  • merge会创建一个新的合并提交,而rebase则会改变当前分支的提交历史,使其看起来像是直接在目标分支上提交的一样。

git stash命令

这个命令可以将,本地工作区和暂存区的代码先保存起来,为啥要这样呢?

有两种情况:

1.你本地的主分支A开发告一段落了,你切了个B分支干新的活,你在当前B分支干活正爽,结果说你主分支上出bug了需要紧急修复,你不得不放下手头里的活切到A分支上去修复代码,可是这个时候直接切git是不会让你切的,因为你还有一堆变更未提交的文件还在B分支上,要么你提交(但是没做完提交有点不合理),要么你就用git stash先将当前B分支的代码存起来,等改完A分支上的代码后切回B再取回来用(git stash pop:恢复并删除 stash 。git stash apply:恢复不删除stash)。

2.你还没提交代码的时候,要拉代码,这时候git也不会让你拉,你也只能把当前代码stash后再拉代码。

分支回滚远程代码

1.git reset

#找到版本号
$ git log
#当前版本号
commit 76ba27012bab81ec56b84eef085355f4f318f9e9 (HEAD -> main, origin/main, origin/HEAD)
#上一次的版本号
commit 14109a7c0cedc775070f73d6737a418b505db9d0 (origin/hello, MyHello)

# 设置要回退到的版本号
$ git reset --hard 14109a7c0cedc775070f73d6737a418b505db9d0
HEAD is now at 14109a7 hello

#提交更改  注意 main主分支有的时候会受保护,主分支强制推送会不成功
$ git push -f  origin HEAD:hello
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0

#git push origin HEAD:hello 这句话啥意思呢
origin: 这是远程仓库的别名。当你使用 git clone 命令克隆一个仓库时,Git 会自动将远程仓库命名为 origin(除非你指定了不同的名字)。之后,你可以使用 git remote 命令来查看或修改远程仓库的别名。
HEAD:hello: 这部分指定了要推送的本地分支和远程分支的对应关系。
HEAD: 通常表示当前检出的分支。也就是说,这条命令将会推送当前分支的更改。
hello: 这是远程仓库上的目标分支名。这条命令的意思是将本地当前分支(由 HEAD 指定)的更改推送到远程仓库的 hello 分支。
所以,整体来说,git push origin HEAD:hello 这条命令的意思是:“将当前分支的更改推送到名为 origin 的远程仓库的 hello 分支上。”
如果远程仓库的 hello 分支不存在,Git 将会尝试创建一个新的 hello 分支,并将本地分支的更改推送到这个新分支上。如果 hello 分支已经存在,并且你没有使用 --force 选项,Git 将会尝试合并这些更改(如果可能的话),否则它会拒绝推送并给出一个错误消息。

git这个log啥意思:commit debcf712367aacb535be3a8867d988eaa1e6539c (HEAD -> new_branch, master)

  • HEAD: 在Git中,HEAD 是一个特殊的指针,它指向当前检出的提交(也就是你当前所在的分支的最新提交)。这里显示 HEAD 指向 new_branch 分支上的这个提交,说明你现在正位于 new_branch 分支上。
  • -> new_branch: 这部分指示 new_branch 分支指向这个提交。换句话说,new_branch 的最新提交就是这个 debcf71
  • , master: 逗号后的 master 表示 master 分支也指向这个提交。这通常意味着 new_branch 和 master 分支在这一点上是相同的,也就是说它们共享相同的提交历史,直到这个提交。

从这段输出中,我们可以得出以下结论:

  1. 你当前位于 new_branch 分支上。
  2. new_branch 分支和 master 分支都指向同一个提交 debcf712367aacb535be3a8867d988eaa1e6539c

如果你在这个状态下在 new_branch 上做了新的提交,new_branch 将会向前移动,而 master 仍然会指向这个旧的提交,除非你也显式地在 master 上做了提交或合并了 new_branch 到 master

2.git revert

revert操作,适用于撤销某一版本,而保留该版本之后的其他版本提交。适用场景:例如某需求先后进行过第一、第二、第三次版本提交之后发现第二个版本有问题,需要撤销第二个版本的操作,同时保留第三次版本的提交,可使用git revert操作。

比如创建三个文件1.txt,2.txt,3.txt,分次推送后,再撤销第一次的,如下操作可见第一次的那个1的文件没了。

#查看日志
$ git log
commit 8df77d747472bc9545d6847b6f2278f00ebf5773
Author: admin <xxx@qq.com>
Date:   Thu May 30 15:57:05 2024 +0800

    3

commit 8cd63ad98cea08782a94ade57837e79ad211ebf6
Author: admin <xxx@qq.com>
Date:   Thu May 30 15:56:51 2024 +0800

    2

commit 148cdf939d95fc47ab94a026d68dc883f788f075
Author: admin <xxx@qq.com>
Date:   Thu May 30 15:56:01 2024 +0800

    1

#只撤回第一次的那个1.txt
$ git revert -n 148cdf939d95fc47ab94a026d68dc883f788f075

#推送到远程
$ git push origin HEAD:hello

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

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

相关文章

Java中的枚举(Enum)

基本概念 Java 枚举是一个特殊的类&#xff0c;一般表示一组常量&#xff0c;比如一年的 4 个季节&#xff0c;一个年的 12 个月份&#xff0c;一个星期的 7 天&#xff0c;方向有东南西北等。 Java 枚举类使用 enum 关键字来定义&#xff0c;各个常量使用逗号&#xff08;,&…

android gradle8.3 发布插件踩过的坑

之前写过gradle6.x和gradle7.x的插件&#xff0c;会有一些改动&#xff0c;到8.x我发现又有一些变化&#xff0c;记录一下&#xff0c;防止后边再遇到相同的情况 下边是插件的gradle文件配置 plugins {id("java-gradle-plugin") //会自动引入java-library、gradleAp…

【Linux】 管道扩展 — 开始使用命名管道

送给大家一句话&#xff1a; 人生有六个字&#xff0c;前面三个是不害怕&#xff0c;后面三个是不后悔。 -- 董卿 &#x1f506;&#x1f506;&#x1f506;&#x1f506;&#x1f506;&#x1f506;&#x1f506;&#x1f506; 命名管道的功能实现 1 命名管道的原理2 代码实…

ROS2从入门到精通2-1:launch多节点启动与脚本配置

目录 0 专栏介绍1 ROS2的启动脚本优化2 ROS2多节点启动案例2.1 C架构2.2 Python架构 3 其他格式的启动文件3.1 .yaml启动3.2 .xml启动 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的…

博客星球大冒险:用Spring Boot和JWT打造你的数字王国

揭秘如何在Spring Boot中无缝集成JWT&#xff0c;为你的应用打造一个高度可扩展且安全的认证系统。从添加依赖到创建JWT过滤器&#xff0c;再到实现令牌的有效性管理和刷新机制&#xff0c;每一步都精心设计&#xff0c;确保你的乐园能够迎接成千上万的游客&#xff01; 文章目…

AltiumDesigner/AD添加数据库连接

1.首先确保本机电脑有无对应的数据库驱动&#xff0c;例如我这边要添加MySQL的数据&#xff0c;则需要首先下载MySQL数据驱动&#xff1a;MySQL :: Download MySQL Connector/ODBC (Archived Versions) 2.运行“odbcad32.exe”&#xff0c;如下图添加对应的数据库配置&#xf…

基于深度学习的模糊认知图方法

1 文章信息 文章题目为“Deep Fuzzy Cognitive Maps for Interpretable Multivariate Time Series Prediction”&#xff0c;该文于2019年发表于“IEEE TRANSACTIONS ON FUZZY SYSTEMS”。文章提出了深度模糊认知图&#xff08;FCM&#xff09;用于多变量时间序列预测&#xff…

一个良好的嵌入式系统框架(基于FreeRTOS)

目录 Unix操作系统里的优先级嵌入式系统里的优先级 Unix操作系统里的优先级 在《Unix传奇》中有这样一句话&#xff0c;用户态的进程/线程是三等公民、root线程是二等公民、硬件中断是一等公民。 在操作系统中&#xff0c;"用户态"和"内核态"是两种不同的…

BERT模型学习(1)

BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;由谷歌在2018年推出&#xff0c;迅速成为自然语言处理&#xff08;NLP&#xff09;领域的一个突破性成果。 基本概念 在深入了解BERT之前&#xff0c;需要先简单了解一下自然语言处理&a…

五分钟“手撕”链表

为了提高大家的学习效率&#xff0c;我把代码放开头&#xff0c;供查阅。 目录 一、链表的实现代码 二、什么是链表 三、链表的分类 四、链表的常见操作 插入 删除 五、Java自带的LinkedList 两个构造方法 一些常用方法 六、LinkedList的遍历 七、ArrayList和Linke…

达梦数据库写文件的方式探索

0x01 前沿 这篇文章整体算是《达梦数据库手工注入笔记》的续集&#xff0c;达梦作为国内优秀的信创数据库&#xff0c;在关基单位中拥有越来越大的用户使用量。 通过SQL注入来写文件一直以来都是SQL注入漏洞深入利用的一种方式&#xff0c;对于不同的数据库通常写文件的方式也是…

探索无限可能性——微软 Visio 2021 改变您的思维方式

在当今信息化时代&#xff0c;信息流动和数据处理已经成为各行各业的关键。微软 Visio 2021 作为领先的流程图和图表软件&#xff0c;帮助用户以直观、动态的方式呈现信息和数据&#xff0c;从而提高工作效率&#xff0c;优化业务流程。本文将介绍 Visio 2021 的特色功能及其在…

【管理咨询宝藏119】翰威特组织架构设计优化方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏119】翰威特组织架构设计优化方案 【格式】PDF版本 【关键词】人力资源、组织设计、组织架构 【核心观点】 - 城镇化建设和居民可支配收入的增长…

Python实现定时任务的方式

大家好&#xff0c;在当今数字化的时代&#xff0c;定时任务的需求在各种应用场景中频繁出现。无论是数据的定时更新、周期性的任务执行&#xff0c;还是特定时间点的操作触发&#xff0c;Python 都为我们提供了强大而灵活的手段来实现这些定时任务。当我们深入探索 Python 的世…

代理 模式

一、什么是代理模式 代理模式指代理控制对其他对象的访问&#xff0c;也就是代理对象控制对原对象的引⽤。在某些情况下&#xff0c;⼀个对象不适合或者不能直接被引⽤访问&#xff0c;⽽代理对象可以在客⼾端和⽬标对象之间起到中介的作⽤。 二、为什么使用代理模式 模式作…

MySQL各种锁

目录 1. 从粒度上区分锁 1.1 全局锁&#xff08;第一粒度&#xff09; 1.2 表级锁&#xff08;第二粒度&#xff09; 1.3 行锁&#xff08;第三最小粒度&#xff09; 2 从模式上区分锁 2.1 什么是乐观锁 2.2 什么是悲观锁 2.3 意向共享锁和意向排他锁 2.4 临键锁和记录…

【Python】 深入理解Python中的UnicodeDecodeError及其解决方案

基本原理 在Python编程中&#xff0c;我们经常需要处理各种类型的数据&#xff0c;尤其是文本数据。文本数据在计算机中通常以字节的形式存在&#xff0c;而字节需要被解码成我们能够理解的字符。这个过程涉及到编码和解码的概念。 编码是将字符转换为字节的过程&#xff0c;…

23 vue3面试重难点复习:响应式原理、特点、8大生命钩子、data数据定义、组件、全家桶

vue作为用的最为广泛的当前热门框架&#xff0c;总结如下重难点核心知识&#xff1a; 1.vue特点是什么&#xff1f; 1.1优点 渐进式 vue本身只提供数据响应式&#xff0c;需要全局缓存用 vuex&#xff0c;需要路由用 vue-router 组件化 封装组件&#xff0c;利于复用 响应式数…

k8s——Pod进阶(资源限制和探针)

一、资源限制 1.1 资源限制的定义 当定义Pod时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是CPU和内存大小&#xff0c;以及其他类型的资源。 当为Pod中的容器指定了request资源时&#xff0c;调度器就使用该信息来决定将Pod调度到哪个节点上。当还为容器…

汇凯金业:量化交易有风险吗

量化交易是一种通过复杂的数学模型和算法在金融市场中进行高频和自动化交易的方式。尽管量化交易在提高市场效率、减少人为错误等方面具有诸多优点&#xff0c;但它也同样存在着不少风险。以下列举了一些主要的风险因素&#xff1a; 1. 模型风险 模型缺陷&#xff1a;量化交易…