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:查看日志

原文地址:https://www.cnblogs.com/BrokenHeart/p/10662672.html