• Git详解及 github使用


    1.1 关于版本控制

    开始之前先看一个没有版本控制的例子

    1.1.1 本地版本控制

    本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的 好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

    1.1.2 集中化的版本控制系统

    如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。这类系统,诸如 CVS、Subversion 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

    1190037-20171130170717667-909081145.png

    1.1.3 分布式版本控制系统

    在这类系统中,像Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

    1190037-20171130170739729-1366084886.png

    1.2 Git简介

    1190037-20171130170749808-269525315.png

    官网:Git

    git是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。

    Git 官方中文手册 Git - Book

    1.2.1 Git历史

    自2002年开始,林纳斯·托瓦兹决定使用BitKeeper作为Linux内核主要的版本控制系统用以维护代码。因为BitKeeper为专有软件,这个决定在社区中长期遭受质疑。在Linux社区中,特别是理查德·斯托曼与自由软件基金会的成员,主张应该使用开放源代码的软件来作为Linux核心的版本控制系统。林纳斯·托瓦兹曾考虑过采用现成软件作为版本控制系统(例如Monotone),但这些软件都存在一些问题,特别是性能不佳。现成的方案,如CVS的架构,受到林纳斯·托瓦兹的批评。

    2005年,安德鲁·垂鸠写了一个简单程序,可以连接BitKeeper的存储库,BitKeeper著作权拥有者拉里·麦沃伊认为安德鲁·垂鸠对BitKeeper内部使用的协议进行逆向工程,决定收回无偿使用BitKeeper的授权。Linux内核开发团队与BitMover公司进行蹉商,但无法解决他们之间的歧见。林纳斯·托瓦兹决定自行开发版本控制系统替代BitKeeper,以十天的时间,编写出第一个git版本

    1.3 安装git

    1.3.1 环境说明

    1. [root@git ~]# rpm -qa centos-release
    2. centos-release-7-4.1708.el7.centos.x86_64
    3. [root@git ~]# uname -a
    4. Linux gitlab 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    5. [root@git ~]# getenforce
    6. Disabled
    7. [root@git ~]# systemctl status firewalld.service
    8. ● firewalld.service - firewalld - dynamic firewall daemon
    9.   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
    10.   Active: inactive (dead)
    11.     Docs: man:firewalld(1)

    本文使用的linux系统均为该系统

    本文使用的windows系统为 Microsoft Windows [版本 10.0.15063]

    1.3.2 Yum安装Git

    centos 自带git

    1. [root@git ~]# rpm -qa git
    2. git-1.8.3.1-11.el7.x86_64

    安装方法

    [root@git ~]# yum install git -y

    1.3.3 编译安装

    编译安装可以安装较新版本的git

    Git下载地址: https://github.com/git/git/releases

    1. # 安装依赖关系
    2. [root@git ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel autoconf gcc perl-ExtUtils-MakeMaker
    3. # 编译安装
    4. [root@git ~]# tar -zxf git-2.0.0.tar.gz
    5. [root@git ~]# cd git-2.0.0
    6. [root@git ~]# ./configure --prefix=/usr/local/git # 没有文件可以略过
    7. [root@git ~]# make  
    8. [root@git ~]# make install  

    1.4 初次运行 Git 前的配置

    1.4.1 配置git

    命令集

    1. git config --global user.name "username" #配置git使用用户
    2. git config --global user.email "email@mail.com" #配置git使用邮箱
    3. git config --global color.ui true #语法高亮
    4. git config --list # 查看全局配置

    配置过程

    1. [root@gitlab ~]# git config --global user.name "newrain" #配置git使用用户
    2. [root@gitlab ~]# git config --global user.email "newrain@aliyun.com" #配置git使用邮箱
    3. [root@gitlab ~]# git config --global color.ui true #语法高亮
    4. [root@gitlab ~]# git config --list # 查看全局配置
    5. user.name=newrain
    6. user.mail=newrain@aliyun.com
    7. color.ui=true

    生成的配置文件

    1. [root@gitlab ~]# cd
    2. [root@gitlab ~]# cat .gitconfig
    3. [user]
    4.       name = newrain
    5.       email = newrain@aliyun.com
    6. [color]
    7.   ui = true

    1.4.2 获取帮助

    使用Git时需要获取帮助,有三种方法可以找到Git命令的使用手册:

    1. git help <verb>
    2. git <verb> --help
    3. man git-<verb>

    例如,要想获得配置命令的手册,执行

    git help config

    1.5 获取 Git 仓库(初始化仓库)

    1.5.1 创建裸库

    1. [root@gitlab ~]# useradd git
    2. [root@gitlab ~]# passwd git
    3. [root@gitlab ~]# mkdir /git-root/
    4. [root@gitlab ~]# cd /git-root/
    5. [root@gitlab git-root]# git init --bare shell.git
    6. Initialized empty Git repository in /git-root/shell.git/
    7. [root@gitlab git-root]# chown -R git:git shell.git

    1.5.2 创建本地库

    1. [root@gitlab opt]# ssh-keygen
    2. [root@gitlab opt]# ssh-copy-id git@192.168.249.156
    3. [root@gitlab opt]# git clone git@192.168.249.156:/git-root/shell.git
    4. [root@gitlab opt]# ls
    5. rh shell
    6. [root@gitlab opt]# cd shell/
    7. [root@gitlab shell]# vim test1.sh
    8. [root@gitlab shell]# git add test1.sh
    9. [root@gitlab shell]# git commit -m 'first commit'
    10. [master (root-commit) 33c5fbf] first commit
    11. 1 file changed, 2 insertions(+)
    12. create mode 100644 test1.sh
    13. [root@gitlab shell]# git push origin master
    14. Counting objects: 3, done.
    15. Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.
    16. Total 3 (delta 0), reused 0 (delta 0)
    17. To git@192.168.1.102:/git-root/shell.git
    18. * [new branch]     master -> master
    19. [root@gitlab shell]#
    20. # git cat

    1.6 Git命令常规操作

    常用命令说明

    命令命令说明
    #add添加文件内容至索引
    bisect通过二分查找定位引入 bug 的变更
    #branch列出、创建或删除分支
    #checkout检出一个分支或路径到工作区
    #clone克隆一个版本库到一个新目录
    #commit记录变更到版本库
    #diff显示提交之间、提交和工作区之间等的差异
    fetch从另外一个版本库下载对象和引用
    grep输出和模式匹配的行
    #init创建一个空的
    #log显示提交日志
    #merge合并两个或更多开发历史
    #mv移动或重命名一个文件、目录或符号链接
    #pull获取并合并另外的版本库或一个本地分支
    #push更新远程引用和相关的对象
    rebase本地提交转移至更新后的上游分支中
    #reset重置当前HEAD到指定状态
    #rm从工作区和索引中删除文件
    show显示各种类型的对象
    #status显示工作区状态
    #tag创建、列出、删除或校验一个GPG签名的 tag 对象

    常用操作示意图

    0

    文件的状态变化周期

    1190037-20171130171009651-1964332055.png

    1.6.1 创建文件

    1. [root@gitlab git_data]# touch README
    2. [root@gitlab git_data]# git status
    3. # 位于分支 master
    4. #
    5. # 初始提交
    6. #
    7. # 未跟踪的文件:
    8. #   (使用 "git add ..." 以包含要提交的内容)
    9. #
    10. #   README
    11. 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
    12. ---
    13. # On branch master
    14. #
    15. # Initial commit
    16. #
    17. # Untracked files:
    18. #   (use "git add ..." to include in what will be committed)
    19. #
    20. #       README
    21. nothing added to commit but untracked files present (use "git add" to track)

    添加文件跟踪

    1. [root@gitlab git_data]# git add ./*
    2. [root@gitlab git_data]# git status
    3. # 位于分支 master
    4. #
    5. # 初始提交
    6. #
    7. # 要提交的变更:
    8. #   (使用 "git rm --cached ..." 撤出暂存区)
    9. #
    10. #   新文件:   README
    11. #
    12. ---
    13. # On branch master
    14. #
    15. # Initial commit
    16. #
    17. # Changes to be committed:
    18. #   (use "git rm --cached ..." to unstage)
    19. #
    20. #       new file:   README
    21. #

    文件会添加到.git的隐藏目录

    1. [root@gitlab git_data]# tree .git/
    2. .git/
    3. ├── branches
    4. ├── config
    5. ├── description
    6. ├── HEAD
    7. ├── hooks
    8. │   ├── applypatch-msg.sample
    9. │   ├── commit-msg.sample
    10. │   ├── post-update.sample
    11. │   ├── pre-applypatch.sample
    12. │   ├── pre-commit.sample
    13. │   ├── prepare-commit-msg.sample
    14. │   ├── pre-push.sample
    15. │   ├── pre-rebase.sample
    16. │   └── update.sample
    17. ├── index
    18. ├── info
    19. │   └── exclude
    20. ├── objects
    21. │   ├── e6
    22. │   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
    23. │   ├── info
    24. │   └── pack
    25. └── refs
    26.   ├── heads
    27.   └── tags

    由工作区提交到本地仓库

    1. [root@gitlab git_data]# git commit -m 'first commit'  
    2. [master(根提交) bb963eb] first commit
    3. 1 file changed, 0 insertions(+), 0 deletions(-)
    4. create mode 100644 README

    查看git的状态

    1. [root@gitlab git_data]# git status
    2. # 位于分支 master
    3. 无文件要提交,干净的工作区
    4. # On branch master
    5. nothing to commit, working directory clean

    提交后的git目录状态

    1. [root@gitlab git_data]# tree .git/
    2. .git/
    3. ├── branches
    4. ├── COMMIT_EDITMSG
    5. ├── config
    6. ├── description
    7. ├── HEAD
    8. ├── hooks
    9. │   ├── applypatch-msg.sample
    10. │   ├── commit-msg.sample
    11. │   ├── post-update.sample
    12. │   ├── pre-applypatch.sample
    13. │   ├── pre-commit.sample
    14. │   ├── prepare-commit-msg.sample
    15. │   ├── pre-push.sample
    16. │   ├── pre-rebase.sample
    17. │   └── update.sample
    18. ├── index
    19. ├── info
    20. │   └── exclude
    21. ├── logs
    22. │   ├── HEAD
    23. │   └── refs
    24. │       └── heads
    25. │           └── master
    26. ├── objects
    27. │   ├── 54
    28. │   │   └── 3b9bebdc6bd5c4b22136034a95dd097a57d3dd
    29. │   ├── bb
    30. │   │   └── 963eb32ad93a72d9ce93e4bb55105087f1227d
    31. │   ├── e6
    32. │   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
    33. │   ├── info
    34. │   └── pack
    35. └── refs
    36.   ├── heads
    37.   │   └── master
    38.   └── tags

    1.6.2 添加新文件

    git add  * 添加到暂存区域
    git commit  提交git仓库 -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看

    修改或删除原有文件

    常规方法

    git add  *
    git commit

    简便方法

    git commit -a  -m "注释信息"

    -a 表示直接提交

    Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are
    not affected.

    1.6.3 删除git内的文件

    命令说明:

    • 没有添加到暂存区的数据直接rm删除即可。

    • 已经添加到暂存区数据:

    git rm --cached database

    #→将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

    git rm -f database

    #→将文件数据从git暂存区和工作目录一起删除

    命令实践:

    # 创建新文件
    
    1. [root@gitlab git_data]# touch 123
    2. [root@gitlab git_data]# git status
    3. # 位于分支 master
    4. # 未跟踪的文件:
    5. #   (使用 "git add ..." 以包含要提交的内容)
    6. #
    7. #   123
    8. 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
    9. ---
    10. # On branch master
    11. # Untracked files:
    12. #   (use "git add ..." to include in what will be committed)
    13. #
    14. #       123
    15. nothing added to commit but untracked files present (use "git add" to track)

    # 将文件添加到暂存区域

    1. [root@gitlab git_data]# git add 123
    2. [root@gitlab git_data]# git status
    3. # 位于分支 master
    4. # 要提交的变更:
    5. #   (使用 "git reset HEAD ..." 撤出暂存区)
    6. #
    7. #   新文件:   123
    8. ---
    9. # On branch master
    10. # Changes to be committed:
    11. #   (use "git reset HEAD ..." to unstage)
    12. #
    13. #       new file:   123

    # 删除文件

    1. [root@gitlab git_data]# rm 123 -f
    2. [root@gitlab git_data]# ls
    3. README
    4. [root@gitlab git_data]# git status
    5. # 位于分支 master
    6. # 要提交的变更:
    7. #   (使用 "git reset HEAD ..." 撤出暂存区)
    8. #
    9. #   新文件:   123
    10. #
    11. # 尚未暂存以备提交的变更:
    12. #   (使用 "git add/rm ..." 更新要提交的内容)
    13. #   (使用 "git checkout -- ..." 丢弃工作区的改动)
    14. #
    15. #   删除:     123
    16. #
    17. ---
    18. # On branch master
    19. # Changes to be committed:
    20. #   (use "git reset HEAD ..." to unstage)
    21. #
    22. #       new file:   123
    23. #
    24. # Changes not staged for commit:
    25. #   (use "git add/rm ..." to update what will be committed)
    26. #   (use "git checkout -- ..." to discard changes in working directory)
    27. #
    28. #       deleted:   123
    29. [root@gitlab git_data]# git reset HEAD ./*
    30. [root@gitlab git_data]# git status
    31. # 位于分支 master
    32. 无文件要提交,干净的工作区
    33. ---
    34. # On branch master
    35. nothing to commit, working directory clean

    1.6.4 重命名暂存区数据

    • 没有添加到暂存区的数据直接mv/rename改名即可。

    • 已经添加到暂存区数据:

    git mv README NOTICE
    1. [root@gitlab git_data]# git mv README notice
    2. [root@gitlab git_data]# git status
    3. # On branch master
    4. # Changes to be committed:
    5. #   (use "git reset HEAD ..." to unstage)
    6. #
    7. #       renamed:   README -> notice
    8. #

    1.6.5 查看历史记录

    • git log #→查看提交历史记录

    • git log -2 #→查看最近几条记录

    • git log -p -1 #→-p显示每次提交的内容差异,例如仅查看最近一次差异

    • git log --stat -2 #→--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

    • git log --pretty=oneline #→--pretty根据不同的格式展示提交的历史信息

    • git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录

    • git log --pretty=fomat:"%h %cn" #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名。

    使用format参数来指定具体的输出格式

    格式说明
    %s提交说明。
    %cd提交日期。
    %an作者的名字。
    %cn提交者的姓名。
    %ce提交者的电子邮件。
    %H提交对象的完整SHA-1哈希字串。
    %h提交对象的简短SHA-1哈希字串。
    %T树对象的完整SHA-1哈希字串。
    %t树对象的简短SHA-1哈希字串。
    %P父对象的完整SHA-1哈希字串。
    %p父对象的简短SHA-1哈希字串。
    %ad作者的修订时间。

    命令实践

    1. [root@gitlab git_data]# git log
    2. commit f5b79552635a7dc60afc35c99c1170366d8c5f6b
    3. Author: newrain <newrain@aliyun.com>
    4. Date:   Sat May 11 21:29:21 2019 -0700
    5.   456
    6. commit e9ed8b38a0052cdcd85ecee833ea8198b077f881
    7. Author: newrain <root@vmdesk.localdomain>
    8. Date:   Sat May 11 21:21:12 2019 -0700
    9.   commit 123
    10. commit 9d394114177b8da9e452d001ec610e9c45ceede3
    11. Author: newrain <root@vmdesk.localdomain>
    12. Date:   Sat May 11 20:19:23 2019 -0700
    13.   first commit

    1.6.6 还原历史数据

    Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。

    git reset --hard hash

    git reset --hard HEAD^ #→还原历史提交版本上一次

    git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统

    会自动匹配)

    测试命令

    1. [root@gitlab git_data]# git log
    2. commit f5b79552635a7dc60afc35c99c1170366d8c5f6b
    3. Author: newrain <newrain@aliyun.com>
    4. Date:   Sat May 11 21:29:21 2019 -0700
    5.   456
    6. commit e9ed8b38a0052cdcd85ecee833ea8198b077f881
    7. Author: newrain <root@vmdesk.localdomain>
    8. Date:   Sat May 11 21:21:12 2019 -0700
    9.   commit 123
    10. commit 9d394114177b8da9e452d001ec610e9c45ceede3
    11. Author: newrain <root@vmdesk.localdomain>
    12. Date:   Sat May 11 20:19:23 2019 -0700
    13.   first commit

    还原数据

    1. [root@gitlab git_data]# git reset --hard e9ed8b38a
    2. HEAD is now at e9ed8b3 commit 123
    3. HEAD 现在位于 e9ed8b3 commit 123
    4. # 查看数据
    5. [root@gitlab git_data]# ls
    6. 123 README

    1.6.7 还原未来数据

    什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git log已经找不到这个版本了。

    git reflog #→查看未来历史更新点

    测试命令

    1. [root@gitlab git_data]# git reflog
    2. e9ed8b3 HEAD@{0}: reset: moving to e9ed8b38a
    3. f5b7955 HEAD@{1}: commit: 456
    4. e9ed8b3 HEAD@{2}: commit: commit 123
    5. 9d39411 HEAD@{3}: commit (initial): first commit
    6. [root@gitlab git_data]#  

    1.6.8 标签使用

    前面回滚使用的是一串字符串,又长又难记。

    git tag v1.0 #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。

    git tag #→查看当前所有的标签

    git show v1.0 #→查看当前1.0版本的详细信息

    git tag v1.2 -m "version 1.2 release is test" #→创建带有说明的标签,-a指定标签名字,-m指定说明文字

    git tag -d v1.0 #→我们为同一个提交版本设置了两次标签,删除之前的v1.0

    测试命令

    1. [root@gitlab git_data]# git reset --hard e9ed8b38a
    2. HEAD is now at e9ed8b3 commit 123
    3. [root@gitlab git_data]# git reset --hard V1.0
    4. HEAD is now at e9ed8b3 add test dir
    5. [root@gitlab git_data]# git tag v20171129
    6. [root@gitlab git_data]# git tag
    7. v20171129

    1.6.9 对比数据

    git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改

    后,再把它提交到仓库就放⼼多了。

    1. git diff README
    2. git diff --name-only HEAD HEAD^
    3. git diff --name-only head_id head_id2

    1.7 分支结构

    在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。

    那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。所以团队的合作分支看起来会像下图那样。

    1190037-20171130171522167-746209354.png

    1.7.1 分支切换

    1. [root@gitlab git_data]# git branch newrain
    2. [root@gitlab git_data]# git branch
    3. * master
    4. newrain
    5. [root@gitlab git_data]# git checkout newrain
    6. 切换到分支 'newrain'
    7. Switched to branch 'newrain'
    8. [root@gitlab git_data]# git branch
    9. master
    10. * newrain

    在newrain 分支进行修改

    1. [root@gitlab git_data]# cat README
    2. This is git_data readme
    3. [root@gitlab git_data]# echo '1901' >> README
    4. [root@gitlab git_data]# git add .
    5. [root@gitlab git_data]# git commit -m '1901'
    6. [newrain 4310e7e] 1901
    7. 1 file changed, 1 insertion(+)
    8. [root@gitlab git_data]# git status
    9. # On branch newrain
    10. nothing to commit, working directory clean
    11. ---
    12. # 位于分支 newrain
    13. 无文件要提交,干净的工作区

    回到master分支

    1. [root@gitlab git_data]# git checkout master
    2. Switched to branch 'master'
    3. 切换到分支 'master'
    4. [root@gitlab git_data]# cat README
    5. This is git_data readme
    6. [root@gitlab git_data]# git log -1
    7. commit f5b79552635a7dc60afc35c99c1170366d8c5f6b
    8. Author: newrain <newrain@aliyun.com>
    9. Date:   Sat May 11 21:29:21 2019 -0700
    10.   456

    合并代码

    1. [root@gitlab git_data]# git merge newrain
    2. Updating f5b7955..4310e7e
    3. Fast-forward
    4. README | 1 +
    5. 1 file changed, 1 insertion(+)
    6. [root@gitlab git_data]# git status
    7. # On branch master
    8. nothing to commit, working directory clean
    9. # 位于分支 master
    10. 无文件要提交,干净的工作区
    11. [root@gitlab git_data]# cat README
    12. This is git_data readme
    13. 1901

    1.7.2 合并失败解决

    模拟冲突,在文件的同一行做不同修改

    在master 分支进行修改

    [
    1. root@gitlab git_data]# cat README
    2. This is git_data readme
    3. 1901
    4. [root@gitlab git_data]# echo '1901-git' > README
    5. [root@gitlab git_data]# git commit -m 'newrain 1901-git'
    6. [master 4e6c548] newrain 1901-git
    7. 1 file changed, 1 insertion(+), 2 deletions(-)

    切换到newrain分支

    1. [root@gitlab git_data]# git checkout newrain
    2. Switched to branch 'newrain'
    3. [root@gitlab git_data]# cat README
    4. This is git_data readme
    5. 1901
    6. [root@gitlab git_data]# echo 'newrain' >> README
    7. [root@gitlab git_data]# git commit -m '1901-git-check'
    8. # On branch newrain
    9. # Changes not staged for commit:
    10. #   (use "git add ..." to update what will be committed)
    11. #   (use "git checkout -- ..." to discard changes in working directory)
    12. #
    13. #       modified:   README
    14. #
    15. no changes added to commit (use "git add" and/or "git commit -a")

    回到master分区,进行合并,出现冲突

    1. [root@gitlab git_data]# git checkout master
    2. 切换到分支 'master'
    3. [root@gitlab git_data]# git merge linux
    4. 自动合并 README
    5. 冲突(内容):合并冲突于 README
    6. 自动合并失败,修正冲突然后提交修正的结果。

    解决冲突

    1. [root@gitlab git_data]# vim README
    2. This is git_data readme
    3. 1901
    4. newrain
    5. meger test ti
    6. meger test master

    # 手工解决冲突

    1. [root@gitlab git_data]# git commit -a -m "merge-ti-test"
    2. [master 2594b2380] merge-ti-test

    1.7.3 删除分支

    因为之前已经合并了newrain分支,所以现在看到它在列表中。 在这个列表中分支名字前没有 * 号的分支通常可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。

    查看所有包含未合并工作的分支,可以运行 git branch --no-merged:

    1. git branch --no-merged
    2. testing

    这里显示了其他分支。 因为它包含了还未合并的工作,尝试使用 git branch -d 命令删除它时会失败:

    1. git branch -d testing
    2. error: The branch 'testing' is not fully merged.
    3. If you are sure you want to delete it, run 'git branch -D testing'.

    如果真的想要删除分支并丢掉那些工作,如同帮助信息里所指出的,可以使用 -D 选项强制删除它。

  • 相关阅读:
    第三章 UI组件之弹出组件【Android基础学习】
    【系统设计】设计一个短链接系统
    xLua Lua访问C#注意事项(七)
    Acetylthi/Aminooxy-OVA(Ovalbumin) 乙酰硫代/氨甲基修饰卵清蛋白
    Windows 环境搭建 PostgreSQL 逻辑复制高可用架构数据库服务
    kubesphere
    【元宇宙欧米说】从NFT迈向元宇宙:CYBER-VERSE
    【哈夫曼树(哈夫曼编码)】进阶实验4-3.5 哈夫曼编码 + 基础实验4-2.7 修理牧场
    华为软件测试笔试真题之变态逻辑推理题
    QCC51XX---官网文章编号索引
  • 原文地址:https://blog.csdn.net/weixin_69654831/article/details/134477831