查看分支
分支分为两种,一种是本地已经存在的,还有一种是服务器上有, 但本地不存在的分支,查看的方式稍有区别。
查看本地分支
git branch
命令行绿色标记的为当前所在的分支
查看本地的分支和远程的所有分支
git branch -a
remotes/ 开头,这说明这个分支并不在本地
新建分支
新建分支有两种情况,第一种是远程已经有的分支,需要把它在本地也同样创建一份;还有一种是新建一个远端和本地都不存在的分支。
导入远程分支
把远程分支在本地创建,可以通过 git checkout 分支名 命令进行,这个命令其实是切换分支用的。但当它发现你本地不存在这个分支,会自动找到远程对应的分支然后在本地进行创建
git checkout 分支名
新建本地分支
创建的分支结构和内容会与当前所在的分支一模一样,也就是说,它其实就是复制了当前的分支
git checkout -b 分支名
这个时候远程分支还不存在,所以不能直接推送,需要在第一次推送的时候指定远程分支名
git push --set-upstream origin 分支名
合并分支
合并代码
合并的时候, Git 会对比两个分支代码的差异,当 要合并的分支处于比较新的状态时候, Git 会将合并的分支的代码和提交记录复制到 master 分支中来
git merge 分支名
查看合并记录
git log
删除分支
当我们修改完 bug 之后,就需要删除分支以减少仓库的体积
删除分支的操作分为强制删除和普通删除
普通删除
git branch -d 分支名
一般情况下,删除使用普通删除即可。普通删除相对来说比较安全,避免造成数据丢失的情况
强制删除
git branch -D 分支名
在极少数情况下你可能会遇到普通删除无法将分支删除的情况,强制删除命令执行完毕之后,使用 git log 会发现原来的分支已经没有了。
比较分支差异
查看代码差异
git diff 分支1 分支2 --stat
显示文件具体修改
git diff 分支1 分支2 [filename]
显示全部文件的修改
git diff 分支1 分支2
查看提交记录差异 - 查看新纪录
我基于生产分支上新建了一个 dev 分支,然后提交了代码;但某些原因,我忘记了我提交了几次修改,此时我就可以通过查看 dev 分支中有的记录而在生产分支中没有的记录
git log dev ^master
比较两个分支之间的差异
git log 分支1...分支2 # 查看各记录存在哪些分支上 git log --left-right 分支1...分支2
删除过期分支
如果发现一些分支不需要了,我们可以手动删除,以此提高响应速度;一般两类分支可能需要清理:
1、本地不存在,远程存在该分支,但不需要了
2、远程不存在,本地存在该分支,也不需要了
清理远程分支
# 查看分支列表 git branch -a # 删除远端分支 git push origin --delete 分支名
清理本地分支
# 查看分支列表 git branch -a # 查看远程仓库分支 git remote show origin # 查看远程分支已删除但存在的本地分支 git fetch --prune origin # 查看关联失效的分支 git branch -vv # 删除本地分支 git branch -d 分支名
恢复已经删除的分支
git log 命令,这条命令可以显示所有提交过的版本信息,但我们对分支的一些管理操作并不会显示出来,这些管理的操作日志并不是没有记录,而是需要使用 git reflog 命令才能显示
# 显示分支操作记录 git reflog show # 复制操作前的 commit id git checkout -b 分支名称 [commit id]
回滚 reset 操作
如果你不小心使用 git reset 回滚了提交记录,想找回之前的提交记录也是可以的;可以 git reflog 查看操作历史,找到执行 git reset 命令之前 commitid ,然后 git reset --hard 到那个 commitid 即可
从历史版本中找回删除的文件
有时候,我们在某个版本中删除了文件,后来又突然发现需要这个文件,是可以恢复的;恢复之前首先确定要恢复的文件在哪一个版本( commit )中,假设那个版本号是:7a4312sd ,文件路径为 abc.php 那么参考命如下
git checkout 7a4312sd abc.php
对比分支下的指定版本
对比一个分支下的不同版本
git diff [commit id1] [commit id2]
跨分支比较差异
# 不同分支不同版本比较 git diff [分支名] # 对比不同分支最后一个版本比较 # 不同分支的历史版本比较 git diff [commit id1] [commit id2]
合并代码
假设现在有三个分支,分别为 develop、test、master
这个时候需要将 develop 分支的代码合并到 test 然后 再合并到 master
# 先切换到 test 分支 git checkout test # 将 develop 分支合并到 test git merge develop
代码冲突
可以看到冲突符号以 <<<<<< 开始,以 ====== 符号为分界符号,上面的是当前 test 的,下面的是 develop 分支的,最后以 >>>>>> 为结束符
解决冲突后这里提交版本的方式稍微有一些区别,会在 git commit 后面增加一个 -a 参数,而且不需要 -m 参数
git merge 命令合并代码之后,版本记录会按照时间顺序排序,并自动产生一个 Merge branch 的版本;
git rebase 命令合并代码之后,版本记录会将目标分支的版本放在后面,然后再将当前分支的版本记录放在前边。
合并指定的版本至其他分支
git cherry-pick 命令是一个使用频率比较低,但在需要使用的场景时候非常省事,比如说,你在 develop 分支中开发,提交了 10 个版本,只有 2 个版本是稳定可以测试的,另外几个版本不可以,然后需要赶紧将两个稳定的版本提测,这个时候就可以使用 git cherry-pick 命令了
1、在 develop 分支找到稳定版本的 commitid
2、切换分支到 test 然后依次执行 git cherry-pick 命令
3、通过 git log 检查是否正确