git从入门到放弃
Posted yealxxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git从入门到放弃相关的知识,希望对你有一定的参考价值。
git重要命令
一、本地操作
主要操作:
- git branch 分支:分支管理,创建分支
- git checkout 分支:切换分支
- git checkout – 文件:放弃修改文件,.放弃所有文件
- git merge 分支:合并分支,在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。”
- git rebase 分支:Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。Rebase 的优势就是可以创造更线性的提交历史。
- 提交树概念:HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。HEAD 总是指向当前分支上最近一次提交记录。可以通过git checkout切换到每个提交记录。
- 分离head:分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。常见是这种形式:HEAD -> master -> C1
- git checkout 提交(hash值):分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名,切换到具体的某一个提交记录。
- ^相对引用:使用相对引用的话,你就可以从一个易于记忆的地方(比如 bugFix 分支或 HEAD)开始计算。使用 ^ 向上移动 1 个提交记录;使用 ~ 向上移动多个提交记录,如 ~3。(可以支持链式操作,^可以在父亲上进行选择)
- git checkout master^:master的第一个父节点,还可以使用master ^ ^,master~3等等。
- git branch -f master HEAD~3:使用相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交。
- git reset HEAD~1:git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
- git revert HEAD~1: 创建一个新的提交覆盖掉已经修改的部分。
- 自由修改提交树
- git cherry-pick <提交号>…抓取提交:将一些提交复制到当前所在的位置(HEAD)下面的话, Cherry-pick 是最直接的方式了。
- cheryy-pick比价适合知道hash值,如果不知道的话用交互式rebase:然后对于每个提交进行操作,在vim的文件中操作。
- 技巧
- 提交一个记录:在测试分支上选择想要的提交进入主分支,cherry-pick
- 修改中间的提交记录:git rebase -i 将提交重新排序,commit --amend 来进行一些小修改,git rebase -i 来将他们调回原来的顺序,最后我们把 master 移到修改的最前端。
- 修改中间的提交记录: git checkout master,git cherry-pick 需要修改的提交,git commit --amend,git cherry-pick其他需要的提交
- 标签和描述
- 标签git tag v1 c1:可以永远指向某个提交记录的标识呢,比如软件发布新的大版本,或者是修正一些重要的 Bug 或是增加了某些新特性,比分支更好的可以永远指向这些提交的方法。
- 描述离你最近的锚点(也就是标签): __g
1,git commit --amend:修改
- 作用:通过创建一个新的提交替换当前分支的提示
- 重复提交时候可以当做一次提交
2,git rebase:变基
- 作用一:合并分支:这个合并与git merge不同。merge后git提交的历史会变成多条,rebase会使得提交历史比较干净;作用方向也不同,git merge other 是当前分支主动去合并其他分支,git rebase target是将当前分支改变分支到目标;后续合并操作的方向也不同。
- 作用二:提交清理。当提交很多东西后,不利于code review ,可以用git rebase -i HEAD~4合并4个提交。
3,git checkout:检出
- 作用一:切换分支,git checkout other分支
- 作用二:分离head:切换提交位置,git checkout 提交id(关联.git/HEAD文件)
4,撤销提交
- 方法一:本地撤销,git reset HEAD^,回到上一个提交
- 方法二:远端撤销,git revert HEAD^,采用一个新的提交覆盖当前的提交
5,git branch -f master head~3
- 作用:强制修改分支位置,强制将分支指向head的前三个提交
6,git cherry-pick 提交:
- 作用:整理提交,选择想要的commit到当前的分支
- 与git rebase -i head^很像,但是原理不同,rebase是交互式提交,更改信息,这个是抓取提交。
7,git tag tagname commit
- 作用:给commit设置一个标签名。
- 标签:它们并不会随着新的提交而移动,用来表示一个特定的位置,一般是一个里程碑的进步。
- 可以通过标签访问提交的版本。
8,git describe
- 作用:描述离你最近的锚点(也就是标签)
- 帮你在提交历史中移动了多次以后找到方向
- 返回:__g,标签名,距离多少commit,指定提交的值
9 当使用git merge时会合并几个commit,这个时候会有多个父亲,使用git checkout head^2
- 作用:选择哪一个父亲
- 相对引用:^选择哪一个父亲,~选择前面第几个提交。
二、远端操作
1,远程分支与本地分支的不同
- 远程分支:o/master,检出时自动进入分离 HEAD 状态,因为不能直接在这些分支上进行操作。
- 在本地分支提交会直接作用。
2,git fetch:获取(单纯的下载数据)
- 作用:从远程仓库下载本地仓库中缺失的提交记录
- 作用:更新远程分支指针(如 o/master)
- 注意:并不会改变你本地仓库的状态。它不会更新你的 master 分支,也不会修改你磁盘上的文件。
3,git pull:抓取数据并合并
- 作用:抓取数据,并进行合并
- 等价于:get fetch,git cherry-pick o/master;git rebase o/master;git merge o/master
4,git push:上传并合并
- 作用:负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。
- 所有分支都将会更新。
5,如何完成一次正常的push
- 简单方式:git fetch;git rebase o/master;git push
- 其他方式:git fetch;git merge o/master;git push
- 直接方式:git pull;git push
6, 远程追踪
- 方式一:创建一个本地分支,关联到远程的分支:git checkout -b foo o/master
- 方式二:git branch -u o/master 本地分支
7,git push origin master:git push
- 作用:切到本地仓库中的“master”分支,获取所有的提交,再到远程仓库“origin”中找到“master”分支,将远程仓库中没有的提交记录都添加上去。
- 同时指定了提交记录的来源和去向,与当前位置一点关系都没有了。
- 本地与目的地不同名:git push origin :
8,git fetch参数
- 形式一:git fetch origin foo
- 形式二:git fetch origin foo~:bar
9,删除远端分支
- git push origin :foo(target)
- git fetch origin :foo(target)与之不同,会在本地创建新的分支
10,命令分解:
- git pull origin foo : git fetch origin foo; git merge o/foo
- git pull origin bar~1:bugFix : git fetch origin bar~1:bugFix; git merge bugFix
以上是关于git从入门到放弃的主要内容,如果未能解决你的问题,请参考以下文章