git branch 分支

分支的定义

一个分支是git一个可移动的指针,指向某次提交。每次提交后,当前分支指针就往前挪一个,挪到最新的提交上。

HEAD 指向当前活动的分支

master 默认分支名 (git init命令 默认创建它)

常见分支指令

创建一个分支

git branch testing #创建一个新的分支,指向原来同样的提交

切换分支

git checkout testing  #切换分支,底层是把HEAD指向新的分支。切换后 提交(commit) 会提交到新的分支上
git checkout -b <新分支名> #创建并切换分支
git switch testing-branch #2.23后,切换分支
git switch - #回到前一个分支

#切换分支,工作目录会恢复到该分支的最后一次提交(快照内容)上。
# 作用:便于不同方向的开发


#切换分支前,保持干净的状态(要保证 工作目录 和 暂存区,没有 未被提交的修改)   
#    也可用 暂存(stashing)和 清理(clean)

合并分支

git checkout master #切换分支
git merge iss53 #将iss53上的修改 合并到当前分支(master)中


# git merge B #即 将B合并到当前分支中

git branch 分支_第1张图片git branch 分支_第2张图片

即 生成一次新提交,有两个父提交的最新的文件修改。(若最新的文件修改有冲突,需要进行冲突处理)

删除分支(带'-d' 选项)

git branch -d 要删除的分支

查看 本地和远程的分支

git branch -a

# 分支前的'*':当前HEAD 所指向的分支

查看分支状态(每次分支的最后一次提交)

git branch -v

查看合并/未合并的分支

git branch --merged #已合并的分支
git branch --no-merged #查看未合并工作的分支。用-d选项删除会失效。可以用-D选项强制删除

远程分支

是本地特殊的的分支,与远程仓库保持一致,不能被手工移动,即不能再远程分支上做提交。通常,用于远程分支的移动/同步。

git fetch 远程分支名 #拉取远程的分支内容到本地

rebase

git checkout experiment #切换到e分支
git rebase master #修改冲突文件

git checkout master #需要切换到当前执行rebase的分支,用其进行提交
git merge experiment #合并

每次提交都是一个快照,两个快照不出现冲突时,快照的关联关系是可以改变的。

适用于:本地的分支合并

当出现冲突(修改相同文件),冲突处理方式与merge相同。

但其如果出现冲突,必须使用当前执行rebase分支的提交,否则会引起后续的一系列冲突。

git branch 分支_第3张图片

其他命令

git log 查看分叉历史

git log --oneline --decorate --graph --all 输出提交历史、各分支指向、项目分叉情况

分支的创建和销毁异常高效,因为创建一个分支 即 写入41字节(40个字符和一个换行符)

fast-forward快进:当合并操作没有需要解决的分歧,只是 简单的 将指针向前推进。

三方合并:将两个分支的末端所指的快照(c4和陈) 及两个分支的公共祖先(才),做一个合并。

一次合并提交:将三方合并的结果 作为一个新的快照(c6),并自动创建一个提交指向它。(特点:不止一个父提交)

git branch 分支_第4张图片

git branch 分支_第5张图片

git branch 分支_第6张图片

贮藏(stash)

将 脏状态(跟踪文件的修改和 暂存的改动),保存到一个栈上。可以在任何时候重新应用

这些改动(甚至在不同分支上)

适用于 要切换分支,但不想提交工作。-> 推到栈上

git status #查看改动的状态
git stash #贮藏修改(通常会贮藏 已修改、暂存的已跟踪的文件)

# git stash 或是 git stash push 皆可贮藏

#当工作区干净时,可以切换到其他分支

git stash list #查看贮藏的内容
git stash apply #将 刚刚 贮藏的工作 重新应用

git stash  apply stash@{x} #指定应用某个贮藏


git stash apply --index #?? 重新应用暂存的修改

git stash drop 要移除的贮藏 #移除贮藏

git stash -u #贮藏任何未跟踪的文件

贮藏创建分支 并丢弃贮藏

git stash branch 新分支 
#检出贮藏工作所在的提交,并重新在那应用工作,应用成功后丢弃贮藏

清理(clean)

git clean #去冗余文件或 清理工作目录

git clean -f -d #移除 未跟踪的文件和 空的子目录
#-f 表示 强制执行,需要git配置变量clean.requireForce 没有显示设置为false


git clean -d -n  #演习,告诉你,将会移除什么
# -n 将会 移除什么(不移除,仅演习)

参考:怎样用git将一个分支的东西移动到另一个分支? - 知乎 (zhihu.com)

Pro Git(中文版) (gitee.com)

你可能感兴趣的:(git)