git 改local branch名字_最好的Git分支管理教程
Git最难学习的就是Git的多分支问题,不同操作会对当前分支造成什么影响,比如相同初始状态,类似操作,rebase
和merge
的不同结果。
教程简介
推荐一个非常通俗易懂的Git多分支教程:
Learn Git Branchinglearngitbranching.js.org
学习时长:0.5-1天
教程特点:
- 将各个知识点划分成关卡,像打游戏一样学习。
- 所有操作均产生动态变化过程(可视化),十分容易理解。
- 每个知识点都带练习,看完讲解后亲手输命令看结果,加深印象。
教程平台自己的命令:
- 左边console输入
levels
命令,调出关卡页。 reset
:reset习题为初始状态。undo
:undo上一条git命令。
更多命令及设置:教程GitHub页
上手教程
初接触Git的朋友需要简单了解下Git的基础知识,即可轻松上手这个教程。
Git分为local和remote,一个典型的Git工作流:
- http://github.com上建一个repo(remote),
clone
到local。 - 修改后,
git add –-all
将所有修改加入staging area。 commit
到local repo。push
到remote repo。
图片来源
教程要点
A 图例
如下图,一个节点(状态)对应一次commit
。节点的标识(i.e. c0)表示commit记录的hash值,可用git log
查看。
c1->c0表示c1是在c0基础上的commit。当你只有local或remote时,只有左边实线状态图;两者都有时,则用实线表示local状态(左),虚线表示remote状态(右)。
local的master, o/master,remote的master都是branch name,其中o/是origin/,教程中用o/简写。
默认local master跟踪o/master,o/master跟踪remote master。(跟踪track见教程)
local的HEAD表当前状态,若HEAD和某个branch(i.e. master)相同时,则省略HEAD,并在该branch上加*,表该branch是当前状态(i.e. master*)。
B 主要命令汇总
- 创建、移动分支:branch, checkout
- 撤销变更:reset, revert
- 合并/整理记录:merge, rebase
- 远程相关:pull, push
- 其他:cherry-pick,PR问题
1 创建、移动分支
branch, checkout
创建:
git branch <branch>
git checkout -b <branch>
移动:
git checkout <branch> # 切换到<branch>
分离HEAD:
git log # 查看commit记录
git checkout <commit记录hash前几位> # 将HEAD指向一个状态
相对引用:^
和~
^
表上一节点,^<num>
表第<num>个父节点。~
也表上一节点,~<num>
表往上<num>个节点。- ^ ~支持链式操作,如
^2~3
:第二个父节点往上3个节点。
git checkout master^2 # 将HEAD移到master第2个父节点
强制移动branch:
git branch -f master HEAD~3 # 强制移动master到当前节点往上三个节点的位置
2 撤销变更
reset, revert
- 这里是
git reset
,区别平台自己的reset
命令。 reset
:回滚到之前某一状态。revert
:增加新节点,复制之前某一状态。
git reset HEAD~1
reset后并不是直接删除,git log查到c2记录,还可以checkout或branch -f恢复c2。
git revert c0
3 合并/整理记录
merge, rebase
先来看下两个命令各自的效果:
初始(左)HEAD指向master,将master整理/合并到o/master上:
- git rebase o/master(中)
- git merge o/master(右)
可以看出,相比merge,rebase:
- 优点:rebase使状态图变得很干净,所有commit都在一条线上。
- 缺点:rebase修改了状态图历史。
rebase还支持交互式操作,只需加上-i (--interactive)参数。
e.g.
git rebase -i HEAD~4
4 远程相关
pull, push
pull和push对应。因为pull = fetch + merge,pull –rebase = fetch + rebase,故先解释下fetch:
fetch的使用场景是当clone后remote又有了非local的新的commit:
具体来说,fetch完成了两步操作:
- 从remote下载local缺失的状态。
- 更新local对应remote的指针(i.e. o/master)。
pull = fetch + merge:
git pull先fetch c3到local,并移动o/master指向local c3;然后将当前状态(master*)和o/master merge 。
git pull
pull –rebase = fetch + rebase:
上例用pull –rebase的话
push和pull对应,是将remote没有的local状态上传,并更新相关指针。
git push
push和pull都有两种带参数的形式:
下面的<remote>就是remote repo,默认是origin。
push <remote> <local branch>
将<local branch>上remote没有的状态上传,并更新相关指针。
push <remote> <local状态>:<remote branch>
和第一条的区别:(1)只要是<local状态>就行,即使没branch指向。(2)上传到指定<remote branch>,若remote无<remote branch>,则会自动新建。
pull <remote> <remote branch>
pull <remote> <remote状态>:<local branch>
⭐其实无参数的push和pull就是同步所有变化。
e.g.
初始状态:
git push origin foo
git push origin c5:foo
5 其他
cherry-pick,PR问题
cherry-pick
也是用于整理记录的,可实现pick部分状态到当前branch上。
e.g.
git cherry-pick c2 c4
PR问题:以remote master分支为例,若remote将master锁定,则git push时会返回
! [远程服务器拒绝] master -> master (TF402455: 不允许推送(push)这个分支; 你必须使用pull request来更新这个分支.)
即不允许直接push到master。
解决:新建一个分支,push这个分支,并提交pull request。
git 改local branch名字_最好的Git分支管理教程相关推荐
- git branch 为什么会进入编辑状态_最好的Git分支管理教程
Git最难学习的就是Git的多分支问题,不同操作会对当前分支造成什么影响,比如相同初始状态,类似操作,rebase和merge的不同结果. rebase(左),merge(右) 教程简介 推荐一个非常 ...
- git branch看不到分支_最好的Git分支管理教程
Git最难学习的就是Git的多分支问题,不同操作会对当前分支造成什么影响,比如相同初始状态,类似操作,rebase和merge的不同结果. rebase(左),merge(右) 教程简介 推荐一个非常 ...
- git中local branch追踪remote branch
Git新建本地分支与远程分支关联问题:git branch --set-upstream git在本地新建分支, push到remote服务器上之后,再次pull下来的时候,如果不做处理会报以下提示: ...
- git mr 怎样合并部分_系统掌握Git之—分离头指针与合并操作
分离头指针 分离头指针表示我们在工作在没用分支的情况下,我们通过git log 打印日志,选择中间的一个commitId,然后进行checkout操作,git checkout 82fdac4baac ...
- a commit git 参数是什么意思_深入理解Git - 一切皆commit
在对 git 有了基本理解和知道常规操作之后,如何对 git 的使用有进一步的理解? 一切皆 commit 或许是个不错的理解思路. 本文将从『一切皆 commit 』的角度,通过 git 中常见的名 ...
- as上的git到码云操作_如何使用git从码云克隆项目到本地?
https://www.cnblogs.com/gbb123/p/6784822.html 前段时间,有读者微信问我,如果使用Git从码云或者Github 克隆代码到本地,然后进行提交代码的操作 .可 ...
- git两个账号切换_多个git账号之间的切换
$ clip < ~/.ssh/id_rsa.pub bash: /c/Users/UsersName/.ssh/id_rsa.pub: No such file or directory St ...
- git关闭密码自动存储_项目在 git 里怎样合理的保存配置文件(服务器密码等敏感内容)...
办法其实很多,有两种较常用. 第一种是配置文件不提交真实内容,只提交一个模板文件.每个开发者克隆之后按照自己的环境补完配置文件,这样自然而然就独立出来了(需更改文件名并忽略有效配置文件). 如果配置文 ...
- sudo修改文件夹名字_用 Python 高效智能管理文件夹
#「闪光时刻」主题征文 二期# 大家在写报告.写总结时,是否会先去翻一下以前写过的类似的东西?是否有看过比较好的文章,想保存时却为归类而纠结?是否电脑里的文件越来越多,想删掉一些却又舍不得?身处大数据 ...
最新文章
- 【组队学习】【26期】动手学数据分析
- Spring Boot Web Error Page处理
- 报名 | 2019年第六届清华大学大数据社会科学讲习班
- linux centos使用xrdp远程界面登陆
- dropdown.js
- 音乐播放器 audio
- 算法学习四:算法性能分析理论基础——函数增长与渐进分析
- CSS中背景图片的坐标之使用说明及css中把所有背景图都放在一张图片上减少图片服务器的请求次数问题(转)...
- CSS:实现跳动小球蒙版效果
- 将页面强制保持在所属框架中
- JDK版本变化也太快了,意义有多大?
- 设置linux服务器下开放端口
- 最新二开版漫画小说听书三合一完整源码/整合免签接口/搭建教程/带采集接口
- java的Jaas授权与鉴权
- java郝斌_Java入门学习笔记-郝斌
- CAN总线负载率计算方法说明
- electron + fluent-ffmpeg推送桌面、音视频、窗口
- 《群山唱响》-- 爱的力量
- centos基本命令
- RTX4070ti-40系列显卡配置pytorch深度学习环境过程