zoukankan      html  css  js  c++  java
  • git分支

    创建分支

    一个 Git 仓库可以维护很多开发分支。现在我们来创建一个新的叫 experimental 的分支:

    $ git branch experimental

    运行 git branch 命令可以查看当前的分支列表,以及目前的开发环境处在哪个分支上:

    $ git branch

     experimental

    * master

    切换分支

    experimental 分支是你刚才创建的,master 分支是 Git 系统默认创建的主分支。星号标识了你当工作在哪个分支下,输入 git checkout 分支名 可以切换到其他分支:

    $ git checkout experimental

    Switched to branch 'experimental'

    切换到 experimental 分支,切换完成后,先编辑里面的一个文件,再提交(commit)改动,最后切换回 master 分支:

    # 修改文件file1

    $ echo "update" >> file1

    # 查看当前状态

    $ git status

    # 添加并提交file1的修改

    $ git add file1

    $ git commit -m "update file1"

    # 查看file1的内容

    $ cat file1

    test

    update

    # 切换到master分支

    $ git checkout master

    查看下 file1 中的内容会发现刚才做的修改已经看不到了。因为刚才的修改时在 experimental 分支下,现在切换回了 master 分支,目录下的文件都是 master 分支上的文件了。

    合并分支

    # 修改文件file2

    $ echo "update again" >> file2

    # 查看当前状态

    $ git status

    # 添加并提交file2的修改

    $ git add file2

    $ git commit -m "update file2 on master"

    # 查看file2的内容

    $ cat file2

    test

    update again

    通过下面的 git merge 命令来合并 experimental 到主线分支 master:

    # 切换到master分支

    $ git checkout master

    # 将experimental分支合并到master

    $ git merge -m 'merge experimental branch' experimental

    由于两个 branch 修改了两个不同的文件,所以合并时不会有冲突,执行上面的命令后合并就完成了。

    如果有冲突,比如两个分支都改了一个文件 file3,则合并时会失败。首先我们在master分支上修改file3 文件并提交:

    # 切换到master分支

    $ git checkout master

    # 修改file3文件

    $ echo "master: update file3" >> file3

    # 提交到master分支

    $ git commit -a -m 'update file3 on master'

    然后切换到 experimental,修改 file3 并提交:

    # 切换到experimental分支

    $ git checkout experimental

    # 修改file3文件

    $ echo "experimental: update file3" >> file3

    # 提交到experimental分支

    $ git commit -a -m 'update file3 on experimental'

    切换到 master 进行合并:

    $ git checkout master

    $ git merge experimental

    Auto-merging file3

    CONFLICT (content): Merge conflict in file3

    Automatic merge failed; fix conflicts and then commit the result.

    合并失败后先用 git status 查看状态,会发现 file3 显示为 both modified,查看 file3内容会发现:

    $ cat file3

    test

    <<<<<<< HEAD

    master: update file3

    =======

    experimental: update file3

    >>>>>>> experimental

    上面的内容也可以使用 git diff 查看,先前已经提到 git diff 不加参数可以显示未提交到缓存区中的修改内容。

    可以看到冲突的内容都被添加到了 file3 中,我们使用 vim 编辑这个文件,去掉 Git 自动产生标志冲突的 <<<<<< 等符号后,根据需要只保留我们需要的内容后保存,然后使用 git add file3 和 git commit 命令来提交合并后的 file3 内容,这个过程是手动解决冲突的流程。

    # 编辑冲突文件

    $ vim file3

    # 提交修改后的文件

    $ git add file3

    $ git commit -m 'merge file3'

    删除分支

    当我们完成合并后,不再需要experimental时,可以使用下面的命令删除:

    $ git branch -d experimental

    git branch -d只能删除那些已经被当前分支的合并的分支. 如果你要强制删除某个分支的话就用git branch –D

    撤销一个合并

    如果你觉得你合并后的状态是一团乱麻,想把当前的修改都放弃,你可以用下面的命令回到合并之前的状态:

    $ git reset --hard HEAD^

    # 查看file3的内容,已经恢复到合并前的master上的文件内容

    $ cat file3

    git log 命令可以显示所有的提交(commit):

    $ git log

    如果提交的历史纪录很长,回车会逐步显示,输入 q 可以退出。

    git log 有很多选项,可以使用 git help log 查看,例如下面的命令就是找出所有从 "v2.5“ 开始在 fs 目录下的所有 Makefile 的修改(这个只是举例,不用操作):

    $ git log v2.5.. Makefile fs/

    Git 会根据 git log 命令的参数,按时间顺序显示相关的提交(commit)。

    日志统计

    如果用 --stat 选项使用 git log,它会显示在每个提交(commit)中哪些文件被修改了, 这些文件分别添加或删除了多少行内容,这个命令相当于打印详细的提交记录:

    $ git log --stat

    ******************************************************************************

    你可以按你的要求来格式化日志输出。--pretty 参数可以使用若干表现格式,如 oneline:

    $ git log --pretty=oneline

    或者你也可以使用 short 格式:

    $ git log --pretty=short

    你也可用 medium,full,fuller,email 或 raw。 如果这些格式不完全符合你的需求, 你也可以用 --pretty=format 参数定义格式。

    --graph 选项可以可视化你的提交图(commit graph),会用ASCII字符来画出一个很漂亮的提交历史(commit history)线:

    $ git log --graph --pretty=oneline

    日志排序

    日志记录可以按不同的顺序来显示。如果你要指定一个特定的顺序,可以为 git log 命令添加顺序参数。

    按默认情况,提交会按逆时间顺序显示,可以指定 --topo-order 参数,让提交按拓扑顺序来显示(就是子提交在它们的父提交前显示):

    $ git log --pretty=format:'%h : %s' --topo-order --graph

    你也可以用 --reverse 参数来逆向显示所有提交日志。

    本节讲解了几个基本命令:

    git config:配置相关信息

    git clone:复制仓库

    git init:初始化仓库

    git add:添加更新内容到索引中

    git diff:比较内容

    git status:获取当前项目状况

    git commit:提交

    git branch:分支相关

    git checkout:切换分支

    git merge:合并分支

    git reset:恢复版本

    git log:查看日志

  • 相关阅读:
    基于maven构建javaweb项目思路梳理及改进 在路上
    分圆多项式整理
    第03次作业栈和队列
    C语言第二次实验报告
    week01绪论作业
    第02次作业线性表
    C语言第一次实验报告
    工作流的问题
    无法使用Outlook 2003 Out Of Office Assisant
    刷机
  • 原文地址:https://www.cnblogs.com/BrokenHeart/p/10662672.html
Copyright © 2011-2022 走看看