关闭

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

标签: gitgit  mergetoolgit 冲突git入门
1715人阅读 评论(2) 收藏 举报
分类:

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.0
  master

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.git
   cff6bc9..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_HEAD
   cff6bc9..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.git
   a362394..0ffed81  f_test_1.2.0 -> f_test_1.2.0

3. 小结

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

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

2
0
查看评论

Git快速入门-常用命令之独奏篇

Git快速入门系列文章 - Git快速入门-安装配置篇 - Git快速入门-常用命令之独奏篇 - Git快速入门-常用命令之交响乐篇 - Git快速入门-git stash 暂存变更,git reset 撤销commit,git revert 回退远程版本库 1.概述 Gi...
  • u011884671
  • u011884671
  • 2018-02-08 14:00
  • 1108

Android基础篇之Android快速入门--你必须要知道的基础

Android快速入门 1. 搭建开发环境 >解压压缩文件,得到:①Android SDK   (类似于JDK)② Eclipse  ③ADT >配置两个path环境变量:D:\adt-bundle-windows-x86\sdk\p...
  • u011200604
  • u011200604
  • 2016-07-12 23:57
  • 5291

版本管理之gitlab实践教程:基础篇(1)

这几篇文章主要面向对git和gitlab稍有基础,但是又不太会用的使用者,通过这几文章你可以学到如下gitlab的使用方法: sshkey的设定 创建项目 分支操作 用户/权限/组的操作 配置项目可见性 Merge Request Issues操作 创建Wiki 备份 还原 Webhook Priv...
  • liumiaocn
  • liumiaocn
  • 2017-07-04 17:39
  • 1287

Git快速入门和常用命令

一、快速入门 本地初始化一个项目 首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中。 git config --global user.name "你的名字或昵称" git config --...
  • qq3401247010
  • qq3401247010
  • 2017-12-12 18:38
  • 70

快速入门---Git常用命令(一)

新手入门必背命令——————————————命令——————————————————— -1.查看当前本地库的状态$ git status (http://dl2.iteye.com/upload/attachment/0075/2265/38f4bda3-daa0-3fb7-85d7-b3...
  • JUNJUN_ZHAO
  • JUNJUN_ZHAO
  • 2015-04-05 11:43
  • 535

《sed & awk》读书笔记之 sed 篇

Sed&awk笔记之sed篇:简单介绍 最近在阅读《sed & awk(第二版)》,这本书是sed和awk相关书籍中比较经典的一本。我在读书的时候有一个习惯,就是会作一些笔记,如果有条件我会放到博客中。写博客不仅是给别人看的,更是写给自己看的,同时因为写给别人看,所以必然会在一些细节...
  • chenyulancn
  • chenyulancn
  • 2014-01-02 15:24
  • 564

公司中常用的那些git命令

配置SSH公钥(官网自己配)初始化本地仓库 git init 克隆远程仓库代码 git clone url(复制得来的,下同) 添加远程仓库(这个一旦成功以后就别改了) git remote add origin url 查看远程仓库(如果提交失败,说明没...
  • qq_24422385
  • qq_24422385
  • 2018-01-12 10:17
  • 63

命令行快速入门--常用命令行使用(笔记)

Learn pythong the hard way(第三版)命令快速入门笔记 pwd,mkdir,cd,ls,rmdir,push,popd,cp,mv,more,rm,hostname.
  • xiebin6163
  • xiebin6163
  • 2017-04-21 11:33
  • 486

10分钟搞懂git和github(该教程只适合快速入门)

目录 目录 正文 一 git的安装配置只有初次使用需要配置 用户名和邮件 ssh-keygen -t rsa 添加公钥 二最基础本地git操作若这步看不懂请先看四 三 关联远程github的操作 四github和git的通俗理解 正文一 .git的安装配置(只有初次使用需要配置)1 用户名和邮件$...
  • u013497977
  • u013497977
  • 2017-01-09 18:53
  • 1494

异化的追思——读《变形记》《火之鸟10复活篇》《沙耶之歌》》

  原文图文并茂,请到http://www.jsharer.com/file/738383.htm下载 异化的追思——读《变形记》《火之鸟10复活篇》《沙耶之歌》》Version 1.000三部作品的内容简介《变形记》内容简介推销员格里高尔发现自己变成“巨大的甲虫”,惊慌而又忧郁。父亲发现...
  • luozhuang
  • luozhuang
  • 2008-07-14 13:21
  • 5530
    个人资料
    • 访问:13637次
    • 积分:750
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:0篇
    • 译文:0篇
    • 评论:11条
    联系方式

    Email: flysqrlboy@gmail.com

    GitHub

    文章分类
    文章存档
    最新评论