【git操作命令】

本地提交

提交到本地仓库

$ git commit  // 在当前分支上提交到本地
$ git branch newBranch // 新建一个分支。
$ git checkout newBranch // 移动到某个分支
$ git checkout -b <your-branch-name> // 也可以简化为一个指令
$ git merge a // 首先这个指令的前提是你在master分支上,然后命令会实现,将a合并到master分支上。并且前进一个。
//Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
$ git rebase master // 假设自己是local节点,会将自己复制到master节点并且成为它的子节点。
$ git rebase master local // 将local节点合并到master节点后面
$ git cherry-pick C4 C3 // 这里可以实现类似rebase'的操作。复制这些节点到自己的下方。 !!!区分和rebase的区别,谁当谁的儿子!!

在提交树上移动

对于git指令来说,是存在一个虚拟的HEAD指向标记的。这个标记表示了当前的最新位置。而master表示了当前的分支的位置。
在这里插入图片描述

我们可以移动HEADmaster的位置。核心是checkout。并且需要注意,如果我们使用git checkout X这样会使得HEAD先进行移动,也就是与master分支进行分离。当然我们也可以进行相对位置的移动, 利用^移动到父节点,或者~<num>向上多个节点。

除了移动HEAD之外,我们还可以移动分支,这就是需要强制命令--force。并且需要配合branch

$ git checkout C1 // 这里的C1表示了哈希值,是一个绝对地址。这种方法只是移动头节点。
$ git checkout master^  // Head移动到master的父节点的位置。
$ git checkout master~2 // Head移动到master的父父节点。
$ git branch -f master HEAD~3 // master分支移动到HEAD的父3节点。
$ git rebase -i HEAD~4 // 可以交互式看到之前的4个节点并且操作合并这个四个节点按照任意的顺序合并到前5个父节点

撤销提交

在本地撤销就是reset,相当于回退一步。在云端撤回就是就是revert

$ git reset master~1 // git的节点撤回了一步 注意这里没有用checkout因此HEAD和当前分支
不发生分离。这两个是一体。
$ git revert master//

选择性提交和修改

主要是使用命令git rebase -i HEAD~3这种形式的命令实现修改有选择的整合。这个可以是在新的一枝中选择需要的node进行合并,并且更新master到最新。也可以是修改之前的某一次提交。我们以修改之前的某一次提交为例子。
在这里插入图片描述

git rebase -i HEAD~2;// 这里需要配合的切换C2和C3的顺序。
// 修改之后,c2就位于最新的位置了。此时我们可以修改内容。
git commit --amend; // 这里可以修改相关的c2文件
// 修改完成以后重新正过来位置
git rebase -i HEAD~2;
// 最后更新master节点到最新的位置
git checkout master; git rebase caption;

需要注意这种方法可能导致rebase 的冲突,似乎另外一种方法更好,采用cherry-pick的方法,可以复制并合并在HEAD节点之后的任意节点。同样的任务我们可以改写为

// 首先复制newImage进行合并,然后修改,然后合并caption。相当于重新操作了一整遍。
git cherry-pick newImage;
git commit --amend;
git cherry-pick caption;

添加标签

git 当中树枝是会发生移动的,但是我们希望有一个可以标识节点的东西。这个就是tag标签。我们可以给一些节点添加标签标识这是2.0版本等等。
在这里插入图片描述

git tag V2 c2  // 标识c2这个点加上了V2这个tag 
git describe master // 找到master这个点的最近的tag 比如这个返回v1_2_gC6 标识master这个树上,最近的标签是v1,距离是2,master的哈希标识为C6

远程提交

本地创建一个仓库

git clone [url] // 远程仓库会在我的本地创建一个本地副本`origin/master`这个指示了远程仓库的最新位置
git fetch // 从远程仓库更新本地仓库,但是这个只是已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件
git pull // 这个指令包含了git fetch 和git merge 

git pull --rebase 与 git pull的区别

为什么更喜欢使用rebase呢?因为rebase可以让你的提交树更加的干净整洁。但是merge也有优点,可以让你的历实记录得到保留。


// 同样的命令
git pull; git push; // 图1
git pull --rebase; git push; // 图2 

图1, 使用git pull

图2, 使用git pull --rebase

追踪

使用git branch -u o/master foo,可以实现 foo 就会跟踪 o/master 了。这样在push以后foo分支的内容会push到远端的master上。

fetch,push, pull进阶

git push origin master // 切到本地仓库中的“master”分支,获取所有的提交,再到远程仓库“origin”中找到“master”分支,将远程仓库中没有的提交记录都添加上去
git push origin <source>:<destination> // 比如git push origin master:foo 把本地的master提交到远程的foo分支..<source>远端内容 <detunation>本地目标
git push origin :<destination> // 会输出云端destination 的部分内容。

对于fetch同理,如果没有任何参数,那么会下载全部分支
但是如果给定参数只会下载某个分支
git fetch origin foo;//  下载远程最新的内容到本地的origi/foo的下,而不是我的foo下
git fetch origin <source>:<destination>
git fetch origin foo:bar // 下载远程foo分支的内容到bar下 <source>远端内容 <detunation>本地目标

对于pull也是类似的命令
git pull origin <soure>:<destination> // 将远端的<source>分支下载到本地的<destination>分支,并且与当前checkout的分支合并

全命令关键词总结

  • git add . 虽然没有提及,但是这也是个基本命令,commit的前一步

  • git status 查看git的监控状态

  • git commit

  • git checkout

  • git rebase // git rebase -i HEAD~3

  • git cherry-pick

  • git meger // 合并到当前分支下方

  • git branch

  • git branch -f // 强制移动到name节点

  • ~ and ^ and ^2 切换不同的父节点

  • git reset master~1 // 本地撤销

  • git revert master

  • git tag

  • git describe // 找到master节点最近的标签

  • git clone [url]

  • git fetch

  • git pull AND git pull --rebase

  • git push

  • git fetch/pull/push origin : // 特殊的处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值