git使用手册,有这些就够了^_^

2023-11-16

日常工作中,有了这些git命令,解决你代码提交与合并上的痛点,再也不怕代码和别人冲突了,再也不用为合并代码、冲掉别人代码而头痛了。。。

一、clone仓库中的代码

git clone [svn_addr].git,其中[svn_addr].git为代码仓库的地址。

二、提交本地test分支作为远程的master分支
git push origin test:master

三、提交本地test分支作为远程的test分支
git push origin test:test

四、删除远程分支:
git branch -r -d origin/branch-name  
git push origin :branch-name


五、创建基于远端的某个分支的本地分支:
git branch -b dev-branch origin/dev-branch

git checkout -b dev-branch origin/dev-branch (创建并切换到该分支)

六、将该仓库中的其他分支的提交,合并到当前分支:
git cherry-pick kldsfdkldl(提交的哈希值)

七、改变基板:
git rebase dsfjalkjd(某一版的哈希值)
该命令的应用场景:当本地分支有commit时,如果本地基版落后与远端分支,此时在push代码前,应该做一次git pull去拉一下远端的最新代码,然后将本地的提交push到远端,这时,git实际上是做了两步:1.远端代码拉取到本地后,将本地的那次commit根据时间合并到远端代码上 2.将远端拉取下来的代码与本地落后的代码进行merge,并作一次commit。即本地会产生两次commit,一次是实际自己提交的代码的commit,一次是git自动merge的代码的commit,所以,其实自动merge的那次commit是不需要出现在提交log中的,这时,可以使用git rebase命令将本地那次提交的基版设为拉取下来的最新代码,这样,git就会自动消除他自己产生的那次merge的commit。

八、在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commit 拼接起来才是完整的任务。那么我们为了避免太多的 commit 而造成版本控制的混乱,通常我们推荐将这些 commit 合并成一个:
场景如下:
commit d526a0529901bc47e1fcffab0c87c29dd4df2311
Author: Joven <Joven@qq.com>
Date:   Thu Jun 8 20:47:11 2017 +0800


    第三次提交代码


commit 5b9c68b01250a1299956937c28171fd5e59ccf2f
Author: Joven <Joven@qq.com>
Date:   Tue Jun 13 20:41:28 2017 +0800


    第二次提交代码


commit e23aabe78470aae79fff8cc839e1568182581c97
Author: Joven <Joven@qq.com>
Date:   Tue Jun 13 18:06:47 2017 +0800


    第一次提交代码


commit be49d734eb19b65e02a8d34e16c7bfdc9ce21441
Author: Joven <Joven@qq.com>
Date:   Tue Jun 13 18:04:17 2017 +0800


    修改XXX情况出现的Bug
其中"第一次提交代码", "第二次提交代码", "第三次提交代码" 三次提交均为"XXX功能的添加"代码,因此,想将这三次提交合并为一次在提交到远端,步骤如下:

(1)git rebase -i be49d734eb19b65e02a8d34e16c7bfdc9ce21441
解释:先将提交 d526a0529901bc47e1fcffab0c87c29dd4df2311,
5b9c68b01250a1299956937c28171fd5e59ccf2f,e23aabe78470aae79fff8cc839e1568182581c97进行合并,则需要将基版变换为最早一次提交的上版,即e49d734eb19b65e02a8d34e16c7bfdc9ce21441。
(2)接下来会进入到vim编辑模式,如下:
pick d526a05
pick 5b9c68b
pick e23aabe
下面还会带有解释(Commands):
#p, pick = use commit
#r, reword = use commit, but edit the commit message
#e, edit = use commit, but stop for amending
#s, squash = use commit, but meld into previous commit
#f, fixup = like "squash", but discard this commit's log message
#x, exec = run command(the rest of the line) using shell
其中的s(squash)即为将本次提交合并到前一次中,因此,我们将上面的三行修改为:
pick d526a05
s 5b9c68b
s e23aabe

保存退出(:wq)后,会进入输入提交log message的界面,将没有以#开头的行全部删除掉,然后重新起一行写合并后的提交log信息。
(3)然后保存退出。完成以上后,使用git log查看提交的历史信息,即可发现将三次提交合并为一次了。


九、cherry-pick与merge的相同点与区别:
git cherry-pick pickID(提交代码时的唯一哈希值)
相同点:两个都是将一个修改的代码合并到另一个分支上。
不同点:cherry-pick pickID是只将代码仓库中pickID这次提交的修改合并过来,而merge则是将上次更新的代码到现在最新代码之间的差异都进行合并,因此,如果要提交的这次代码与最新代码之间有好几次提交,则可能将无关代码合并过来或者可能会单独出现一版提交merge代码的记录。

十、远端已经删除的分组,在本地依然能看到,可以使用命令:
git remote prune origin
进行清除。

十一、git冲突处理:
1. 在cherry-pick时出现冲突,会报:
error: 不能应用 38e1b4e... XXXXX
提示:冲突解决完毕后,用 'git add <路径>' 或 'git rm <路径>'
此时说明已经冲突了,用git status进行查看,会出现:
要提交的变更:
    修改:test.cpp
未合并的路径:
    双方修改:xxxx.cpp
此时的代码 没有进行commit,但是已经merge过来,下面会给出的“双方修改:xxxx.cpp”即为冲突的文件名。
编辑冲突的文件xxxx.cpp,文件中介于 <<<<<<<(七个‘<’) HEAD  和 ======= 之间的内容是版本库中的代码, 介于 ======= 和 >>>>>>> 之间的内容是本次自己修改的与版本库代码冲突的代码,可以手动修改这部分代码(即手动解决冲突),手动解决冲突后,执行 git add <文件>标记冲突已解决。
解决完冲突后,执行 git status进行查看,此时已经没有冲突文件了,可以执行git commit进行提交。

十二、git撤销某次commit
找到需要回退的那次commit的 哈希值,执行如下命令:
git reset --hard commit_id

此命令会直接抛弃commit_id之后的所有提交的代码,直接将代码回滚到commit_id.

※技巧:在日程工作中,往往是先使用git checkout  -b dev-branch创建一个临时分支,修改好代码后,提交这次修改到本地仓库,然后查看commit ID,然后git checkout到master分支,然后git pull将代码拉取到最新,然后将dev-branch分支修改的代码运用 git cherry-pick commit_ID到主分支,完了之后将dev-branch分支进行删除,再根据最新的代码创建本地de-branch分支,继续进行修改开发。


/******************* 扫描左上角二维码关注公众号,get更多工作中的实用技巧。*****************/


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git使用手册,有这些就够了^_^ 的相关文章

  • 克隆包含所有子模块的 git 存储库

    我有一个工作 git 存储库 其中包含几个子模块 通过克隆不同的存储库获得 现在 我想要复制整个存储库 包含所有子模块 通过使用推送或克隆到另一台机器上的裸 git 存储库 我很高兴失去子模块的历史记录 我只是对保留它们的内容感兴趣 这可能
  • Git:man 命令不起作用

    在 Git Bash 中 他们给了我一个error用于返回 man command man git bash man command not found 我的 Git 版本 git version git version 2 18 0 wi
  • 如何列出 Git 1.7+ 中的所有远程分支?

    我试过了git branch r 但这仅列出我在本地跟踪的远程分支 如何找到我没有的列表 命令是否列出对我来说并不重要all远程分支或仅那些未跟踪的分支 For the vast majority 1 of visitors here th
  • 从分离的头进行 Git 推送

    我以超然的态度做出了一些改变 我想用 Git 将这些更改推送到这个独立的头 我不希望我的更改进入开发分支 当然也不想进入主分支 我正在与另一个人一起处理一个文件 分支示例 develop master HEAD detached at or
  • 命令来确定当前 HEAD 的上游引用?

    我正在寻找我所希望的简单的一行命令确定当前签出分支的正确上游引用 本质上就像是 git branch remote HEAD 如果有效 会将符号模式 HEAD 转换为当前分支名称 然后选项 remote然后将其更改为远程跟踪分支的引用 但它
  • 使用 GIT 自动增加 AssemblyFileVersion

    好吧 我知道这可能不是传统的 但除此之外 我使用 AssemblyFileVersion 作为我的 构建名称 字符串 它的格式如下 File Version information for an assembly consists of t
  • 从 git 中删除历史记录 - git 命令失败

    我正在尝试从 Git 历史记录中清除项目 bin 目录 我已经将 bin 添加到 gitignore 并运行 git rm cached r bin成功地 现在我尝试使用 GitHub 帮助页面中推荐的命令来清除历史记录 git filte
  • 是否存在比 SVN 更快的集中版本控制?

    我已经使用 SVN 很长时间了 现在我们正在尝试使用 Git 我在这里谈论的不是中心化 去中心化的争论 我唯一关心的是速度 后一个工具要快得多 但有时 我需要使用一种集中式方法 这种方法比分散式方法更简单 更简单 学习曲线非常快 这节省了大
  • 克隆存储库而不将其设为原始远程存储库

    我正在从一台将被擦除的计算机上克隆一个 git 存储库 是否可以在不创建原始存储库的情况下克隆存储库origin master 或者我是否需要克隆它 然后删除远程分支 这是通过git remote rm origin Edit 存储库只有一
  • 如何查看上次提交和现在之间发生了什么变化(进行一些更改后)

    与此类似question https stackoverflow com questions 1552340 how to list the file names only that changed between two commits但
  • 节点项目的 Azure git 部署失败

    我正在尝试将我的项目部署到azure 它正在失败 这些是我采取的步骤 git init git config core longpaths true git add git commit m initial commit 所有这些都有效 我
  • `git rm --cached` 和 `git update-index --assume-unchanged` 之间的区别?

    我不明白之间的区别git rm cached and git update index assume unchanged 我知道git rm cached
  • git 可以与 Xcode 集成吗?

    有没有办法将 git 存储库与 Xcode 内置的 SCM 功能一起使用 Xcode 4 原生支持 git WWDC 2010 上的开发者工具国情咨文演讲 在这里了解更多 Xcode 4 中的新增功能 http developer appl
  • DVCS命令的统一

    当处理多个 开源 项目时 多个版本控制系统开始出现问题 虽然它们共享共同的操作 但我经常在输入时犯错误hg add反而git add 我记得前段时间看到过一个项目 通过提供基本命令以统一的方式访问不同的源代码控制软件提交 ci add等在外
  • Git:如何变基到特定提交?

    我想变基到特定的提交 而不是另一个分支的 HEAD A B C master D topic to A B C master D topic 代替 A B C master D topic 我怎样才能做到这一点 您可以通过在您喜欢的提交上创
  • git - 更新 fork 的 master 并将我的分支重新建立到它之上?

    我分叉了一个 github 项目 然后将其克隆到本地 然后我在新分支中做了一些更改my github the project repo 然后我添加并提交了更改 并推送到我的 github 存储库并提交了拉取请求 所有者已收到我的请求 并希望
  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • 如何从 android.googlesource.com 或 github.com 下载单个目录?

    我想下载 https android googlesource com platform frameworks base git master tools aapt https android googlesource com platfo
  • 远程测试时如何搭建git开发环境

    这似乎是一个愚蠢的问题 但我觉得我对 GIT 相当了解 但我似乎无法按照我的意愿设置我的开发环境 我要么错过了一些非常简单的东西 要么我做错了 我在我的服务器上初始化了一个裸 git 存储库 将其克隆到我的本地计算机 提交我的文件并推送到原
  • 如何将分支逻辑持久化到数据库中?

    我们正在构建一个供内部使用的调查引擎 我想知道如何将问题分支逻辑持久化到数据库中 任何机构之前做过这件事或者对数据库模式有什么想法吗 如果用户给出答案 我们需要根据添加到问题的逻辑跳到下一个问题 每个问题可以添加多个逻辑 For eg Qu

随机推荐

  • Qt之QLabel

    简述 QLabel提供了一个文本或图像的显示 没有提供用户交互功能 一个QLabel可以包含以下任意内容类型 内容 设置 纯文本 使用setText 设置一个QString 富文本 使用setText 设置一个富文本的QString 图像
  • HR人员和岗位关联日期问题

    离职日期是4月3号 但4月1 2号的数据在GET PERNR 就查不到 原因是人员和岗位关联日期在3月31号就结束了 所以选中组织结构后找不到数据了 表HRP1001可以查看 O组织 S岗位 P人员 修改 PO13 gt 关系显示 gt 找
  • UNIX网络编程之源代码的编译和使用

    UNIX网络编程入门 对于想学习网络编程的来说 UNIX网络编程 这书肯定是不二选择 所谓实践是检验真理的唯一标志 特别是对于编程来讲 再多的理论经验也比不过code一次 UNIX网络编程 这本书提供连源码下载 第三本版的源码可点击这里下载
  • Linux——(第六章)常用指令(一)

    目录 一 帮助指令 1 man获取帮助信息 2 help指令 3 常用快捷键 二 文件和目录相关指令 1 pwd 指令 2 ls 指令 3 cd 指令 4 mkdir 指令 5 rmdir指令 6 touch指令 7 cp 指令 8 rm
  • 队列——queue

    Hello 这是你们的苦力怕 今天我去医院做核酸检测 排了老长的队 wait了半个多小时才做完 真是把我整无语死了 但是我在wait的过程中突然想到了一个问题 啥数据结构跟排队很像 对了 就是大名鼎的队列 目录 什么是队列 队列的用法 队列
  • 安装CP210xVCP遇到的问题

    在CE系统里面有USB设备虚拟串口的驱动 CP210xVCP就是这样 在写入注册表的配置信息里面 虚拟的串口默认为COM9 有一些设备上面 COM9是不行的 遇到这样的情况 修改为较小的编号 如COM6是可以的 还有一些设备 裁减掉了USB
  • Vue3、setup的使用

    Vue3 setup ref reactive toRef toRefs 1 setup的使用 1 1 简介 1 2 setup注意点 1 3 定义响应式数据 1 4 toRefs 1 5 setup中执行方法 1 5 1 方式一 1 5
  • Sqli-labs-master 1-4闯关游戏

    Less 1 首先打开到Less 1 根据提示Please input the ID as parameter with numeric value 请输入ID作为带数值的参数 这里我们用GET方法进行尝试 id 1 可以看到返回了用户名及
  • ceph pg inconsistent不一致,ceph pg repair无效

    更多ceph相关文章详见知乎ceph专栏 聊聊ceph ceph pg repair指令执行后 无效原因分析 ceph pg repair这一操作会先进行pg scrub 得到该PG中不一致的对象 然后再进行recovery pg scru
  • NVIDA CUDA architecture查询

    官网查询 https developer nvidia com cuda gpus 如下图所示 另外在CUDA SDK目录下有deviceQuery的示例程序 WIN10路径是C ProgramData NVIDIA Corporation
  • 若要运行此应用程序,您必须首先安装NET Framework 解决办法

    先把进入控制面版 删除原来的版本 安装 Net Framework失败 解决方案 第一步 如果是XP系统 这么做 1 开始 运行 输入cmd 回车 在打开的窗口中输入net stop WuAuServ 2 开始 运行 输入 windir 3
  • stm32f1一路互补PWM大功率DCDC降压方案

    stm32f1 ucc27211 tl431大功率dcdc电路 源码程序
  • 共探工业数智化,TVP河南工业互联网论坛将重磅召开!

    引言 随着数字经济与经济社会发展的深度融合 工业互联网日益成为数字化转型的关键驱动力量 云计算 大数据 AI 物联网等蓬勃发展的新技术将为制造业提供数字转型 智能升级 融合创新等服务 工业互联网也迎来了新一轮的历史发展机遇 在新技术的加持下
  • DataWhale-VCED项目学习-2Jina

    Jina Jina是多模态中存储数据以及处理数据的组件 它可以将非结构化数据 图像 文档 视频等 转化为向量数据 并结合Jina其它的相关组件设计 可以将这些向量数据利用起来 实现多模态相关应用 安装 安装 Jina 需要 Python3
  • git简单命令

    登录自己的账号与邮箱 git config global user name wei gir config global user email ww 进入一个文件夹中之后 git init 初始化仓库 生成 git文件 该文件夹称为工作树
  • 剑指offer-17 合并链表

    2个链表 本来都是从小到大的顺序排列的 现在要求合并 合并后依然从小到大 思路 先设定一个pointer指针 指向新链表的新节点 1 如果链表1为空 则新链表就是链表2 反之一样 2 创建一个指针pointer 在子链表都不为空时 比较两个
  • SQL注入——联合注入

    SQL注入原理 攻击者通过构造不同的SQL语句来实现对数据库的操作 SQL注入的本质 我们也能操作别人的数据库 数据库结构 库 就是一堆表组成的数据集合 表 类似Excel 有行和列组成的二维表 字段 表中的列称为字段 记录 表中的行称为记
  • $LSB_SUB_PARM_FILE

    LSB SUB PARM FILE是一个环境变量 用于指定包含作业提交所需参数的文件路径 这个文件通常由作业脚本生成 并在作业提交命令中使用该变量将此文件与作业一起提交给集群管理器 LSB SUB PARM FILE所生成的文件中包含了作业
  • BAM网络

    摘要 从混叠区域恢复纹理信息一直是单图像超分辨率 SISR 任务的主要挑战 这些区域通常淹没在噪波中 因此我们必须在抑制噪波的同时恢复纹理细节 为了解决这个问题 我们提出了一种平衡注意机制 BAM 它由Avgpool通道注意模块 ACAM
  • git使用手册,有这些就够了^_^

    日常工作中 有了这些git命令 解决你代码提交与合并上的痛点 再也不怕代码和别人冲突了 再也不用为合并代码 冲掉别人代码而头痛了 一 clone仓库中的代码 git clone svn addr git 其中 svn addr git为代码