Git快速入门-常用命令之交响乐篇

article/2025/6/19 2:40:14

Git快速入门系列文章
- Git快速入门-安装配置篇
- Git快速入门-常用命令之独奏篇
- Git快速入门-常用命令之交响乐篇
- Git快速入门-git stash 暂存变更,git reset 撤销commit,git revert 回退远程版本库

1.概述

Git入门系列第三篇,介绍日常开发中,与团队其他成员协作时常用的命令。

2.Git交响乐

2.1 切换分支

现在用户zhangsiwei 加入 f_test_1.2.0分支一起工作了。他执行git clone 把代码拉到本地后,执行git checkout命令切换到 f_test_1.2.0分支,如下

$ git checkout f_test_1.2.0
Branch f_test_1.2.0 set up to track remote branch f_test_1.2.0 from origin.
Switched to a new branch 'f_test_1.2.0'$ git branch
* f_test_1.2.0master

2.2 产生冲突

现在zhangsiwei 和 flysqrlboy 的工作区是相同的。假设这样一种场景:如果两人各自在本地版本库中进行独立的提交,然后再分别向共享版本库Github推送,会相互覆盖吗?通过下面的实践就能知道答案。

首先,zhangsiwei 修改了c.txt 的第一行,然后在本地版本库中提交,再把提交推送到Github。操作步骤如下:

(1)zhangsiwei修改c.txt 的第一行并提交到本地版本库

$ cat c.txt
add by flysqrlboy
test crlf

修改第一行后保存,如下

$ cat c.txt
add by flysqrlboy modify by zhangsiwei
test crlf

提交到本地版本库

$ git add c.txt
$ git commit -m 'zhangsiwei modify'
[f_test_1.2.0 a362394] zhangsiwei modify
1 file changed, 1 insertion(+), 1 deletion(-)

(2)zhangsiwei 将本地提交推送到Github上

$ git push origin f_test_1.2.0
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 312 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:flysqlrboy/learn-git.gitcff6bc9..a362394  f_test_1.2.0 -> f_test_1.2.0

通过上面的操作,用户zhangsiwei 已成功更新了远程Github上的代码。如果用户flysqrlboy不知道用户zhangsiwei所做的上述操作,仍在基于Github旧数据同步而来的本地版本库中进行改动,然后用户flysqrlboy向Github推送,会有什么结果?用下面的操作验证过下。

(3)用户flysqrlboy修改c.txt 的第二行并提交到本地版本库

$ cat c.txt
add by flysqrlboy
test crlf

修改第二行,如下

$ cat c.txt
add by flysqrlboy
test crlf modify by flysqrlboy

提交到本地版本库

$ git add c.txt
$ git commit -m 'flysqrlboy modify'
[f_test_1.2.0 f17bbfe] flysqrlboy modify 
1 file changed, 1 insertion(+), 1 deletion(-)

(4)用户flysqrlboy将本地提交推送到服务器会出错

$ git push origin f_test_1.2.0
To git@git.kuaiwifi.com:zhangsiwei/test.git! [rejected]        f_test_1.2.0 -> f_test_1.2.0 (fetch first)
error: failed to push some refs to 'git@git.kuaiwifi.com:zhangsiwei/test.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

用户flysqrlboy的推送被拒绝,hint里说明了原因:远程版本库包含你本地没有的改动,通常是因为有其他人push了。需要先通过git pull 命令来合并之后再push。git pull 命令会把改动拉到本地,并进行自动合并。

$ git pull origin f_test_1.2.0
Enter passphrase for key '/c/Users/dellzj/.ssh/id_rsa':
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From git@github.com:flysqlrboy/learn-git* branch            f_test_1.2.0 -> FETCH_HEADcff6bc9..a362394  f_test_1.2.0 -> origin/f_test_1.2.0
Auto-merging c.txt
CONFLICT (content): Merge conflict in c.txt
Automatic merge failed; fix conflicts and then commit the result.

提示”CONFLICT (content): Merge conflict in c.txt”,自动合并过程出现了冲突。好,那就先解决冲突,执行命令 git mergetool 打开图形工具,默认会选择系统中已经安装的工具,如kdiff3。

2.3 解决冲突

执行 git mergetool 命令后,会提示使用kdiff3(kdiff3的安装请参考Git快速入门-安装配置篇),按回车后自动打开kdiff3窗口,如下
这里写图片描述

kdiff3上方三个窗口由左至右显示冲突文件的三个版本,分别是:

A:共同祖先版本

B:本地更改的版本(这里就是用户flysqrlboy更改的版本)

C:远程版本(这里就是用户zhangsiwei push到Github的版本)

kdiff3下方的窗口是合并后文件的编辑窗口。

通过下图红框内的箭头或者红框内的红色标记,选中某个冲突行(如第一行),然后选中紫框内的C,表示使用C窗口中的内容

作为合并后的内容。同样的操作,第二行则使用B窗口的内容。确定完成后点击保存按钮,关闭kdiff3窗口退出。

这里写图片描述

这时执行git status,会看到冲突已经解决。不过mergetool会产生一些临时文件,如*.orig,不要提交,手动删除即可。

这里写图片描述

执行git commit命令,会打开commit注释窗口(如下图),git已经为你准备好一个默认注释,就是刚刚合并冲突的注释。保存退出即可。
这里写图片描述

查看刚刚解决冲突的提交日志

$ git log --oneline
0ffed81 Merge remote-tracking branch 'refs/remotes/origin/f_test_1.2.0' into f_test_1.2.0
f17bbfe flysqrlboy modify
a362394 zhangsiwei modify

执行推送,这次成功了。

$ git push origin f_test_1.2.0
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 667 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@github.com:flysqlrboy/learn-git.gita362394..0ffed81  f_test_1.2.0 -> f_test_1.2.0

3. 小结

本文介绍了在多人团队协助时使用Git的常用命令,主要演示了多人修改同一个文件而产生冲突时如何使用kdiff3解决冲突的过程。

知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。


http://chatgpt.dhexx.cn/article/WHnN47XD.shtml

相关文章

开发linux常用指令操作

1. 开发linux常用指令操作 1.文档操作常用指令 命令功能描述ls列出目录cd切换目录pwd显示目前的目录mkdir创建一个新的目录rmdir删除一个空的目录cp复制文件或目录rm移除文件或目录mv移动文件与目录或修改文件与目录的名称 自动补全 在敲出 文件/ 目录 / 命令 的前几个字母…

Git使用教程总和

Git使用教程 【一】下载安装(Windows) 【1】获取Git安装程序 Git官网地址:https://git-scm.com/downloads 因为我们是用Windows系统上的浏览器访问的,Git官网自动之别到了我使用的操作系统,所以右侧直接显示下载使用Windows系统的最新版本(如…

一本面向入门者的Git书

一本面向开发者的Git书《Git学习指南》 如果你在某一团队中从事开发工作,希望了解如何才能有效地使用Git,那么这本书就是一个正确的选择。本书既不是那种偏重于理论的大部头,也不是一本面面俱到的参考书。我们并不打算解释所有的Git命令&…

Git基础操作

文章参考了廖雪峰的Git教程,自己进行了具体的操作学习,实例演示,加以记录学习。 目录 Git简介 Git与GitHub 安装Git 创建版本库 把文件添加到版本库 基本文件操作 修改 版本回退 工作区和暂存区 管理修改 撤销修改 删除文件 远程…

项目开发-工具-版本控制Git完整系统化使用说明

Git使用说明 前言1. 起步1.1 关于版本控制1.2 Git 简史1.3 Git 是什么?1.4 命令行1.5 安装 Git1.6 初次运行 Git 前的配置1.7 获取帮助1.8 总结 2. Git 基础2.1 获取 Git 仓库2.2 记录每次更新到仓库2.3 查看提交历史2.4 撤消操作2.5 远程仓库的使用2.6 打标签2.7 G…

三十分钟轻松玩转Git——学会Git就靠这一篇(ง •_•)ง

文章目录 Git入门教程Git简介🙋‍♀️Git是什么?🙋‍♀️GitHub与码云?🙋‍♀️TortoiseGit是什么?🙋‍♀️图形化客户端? 安装Git初始化Git📍1.配置用户信息&#x1f4c…

【推荐】git commit 规范和如何在 commit 里使用 emoji

前言 大家好,我是桃翁,今天给大家带来的是关于 git commit 那些事儿,希望大家喜欢。 对于规范 git commit message 我是分成了两种类型去看待。 对于通用库、开源项目这类多人维护,而且极大可能别人会来看这份代码的&#xff0c…

从git记录中删除大文件

大家一定遇到过在使用Git时,不小心将一个很大的文件添加到库中,即使删除,记录中还是保存了这个文件。以后不管是拷贝,还是push/pull都比较麻烦。今天将工程上传到github时,发现最大只能上传100MB大小文件,在…

git基本操作(入门级)

写在前面:初次接触git,便想到之前工作,下载跨平台通信库ACL的源代码时的gitHub,于是便借助互联网弄清楚了它们的区别(不过仅供参考)。 关于Git和github区别的参考地址:http://blog.csdn.net/qq_…

一篇文章,让你彻底学会Git

文章目录 1. 版本控制1.1 常见的版本控制工具1.2 版本控制分类1.3 Git与SVN的主要区别 2. Git介绍1.1 Git 功能特点1.2 Git 和 GitHub 的区别 2. Git 环境配置2.1 软件下载2.2 启动Git2.3 Git配置2.3.1 设置用户名与邮箱 3.Git基本理论3.1 三个区域3.2 工作流程 4. Git 项目搭建…

Git-如何写好一条提交信息

Git-如何写好一条提交信息 本文为翻译文章 原文: How to Write a Git Commit Message 作者: cbeams 1.为什么好的提交信息很重要 如果你曾经打开过任意一个Git仓库的提交历史,你可能会发现它们的提交信息多多少少会有些混乱。 请比较下面两个…

GIT的相关内容

概述 git是一个版本管理工具,它是用于管理对应的代码的版本的。它是一个集中式的代码管理工具(支持分布式)。相同的软件还有svn(集中式版本管理工具,它不具备分布式的功能) svn及git的区别 了解git及svn的区别 Git是分布式的,SVN是集中式的Git复杂概念多,SVN简单易上…

长达万字的git常用指令总结(适合小白及在工作中想要对git基本指令有所了解的人群)建议收藏

本篇文章将对git在工作和学习中需要用到的大部分常用指令作详细解答, 觉得有用的C友们可以点个赞支持一下,你们的支持就是我最大的动力~ 本文总结自廖雪峰老师的文档 欢迎大家关注我的公众号:Smooth前端成长记录 公众号同步更新CSDN博客内容…

Git入门到实战

一、Git 基础 1、什么是Git Git是一个分布式版本控制系统。 版本控制系统是一种用于记录一个或多个文件内容变化,方便我们查阅特定版本修订情况的系统。 示例: 以前在没有使用版本控制的时候,我们通常在我们的项目根目录下这样命名项目&am…

git操作笔记

查询git命令 $ git --help 概述 Git是开源的分布式版本控制系统,git可以有效、高速地处理从很小到非常大的项目版本管理。 git 瘦身 解决 .git文件夹过大的问题, .git文件主要用来记录每次提交的变动,当我们的项目越来越大的时候&#xff0…

Git相关使用

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

cmd命令安装python第三方库_Python如何安装第三方库

Python如何安装第三方库 [版权申明] 非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/cdpxc/article/details/108808780 出自:cdpxc 注:笔者是在D盘直接安装了Anaconda (https://www.anaconda.com/)并非直接安装的Python (https://www.python.org/downloads/)…

基于区块链的数字版权保护介绍

一、数字版权定义: 各类出版物、信息资料的网络出版权,可以通过新兴的数字媒体传播内容的权利。包括制作和发行各类电子书、电子杂志、手机出版物等的版权。 各国家对于数字版权作品的定义不一。以中国为例,主要数字版权作品包括以电子图书、…

2018年博客之星,需要您宝贵的一票!

很荣幸入选了CSDN博客之星候选,既然入选了,那么我还是想全力以赴!虽然比不上其他大佬那么优秀,但还是希望大家多多支持! 请投 003 号:LovelyBear2019 一票 投票地址 https://bss.csdn.net/m/topic/blog_…

方波中的毛刺

在FPGA设计中,经常要对外部输入的信号捕捉上升沿。 在某些设计中,外部输入信号为方波信号,由比较器输出。 如上图,比较器输出方波后,电路设计欠佳,产生抖动,下降沿产生毛刺,如果FPG…