天天看点

git常用的操作命令学习

提交。

从暂存区撤回修改

reset命令可以用来重置暂存区,主要用于被重置add的部分。如果add命令之后,这个文件有了其他修改,那么这些修改有可能会丢失。

git reset HEAD .
git reset HEAD foo.txt
           

保存修改

我们可以用stash命令,将工作区和暂存区的修改保存在一个储藏栈中。

git stash

恢复被储藏的修改

我们可以用这个命令将储藏的修改恢复到工作区中

git stash pop
//检查储存了哪些内容
git stash list
           

分支

执行切换分支的命令被拒绝该怎么办?

有时候如果工作区域还有一些修改,这个时候去切换分支,就会被拒绝。解决的方式有三种。第一种是提交现有的修改,然后切换。第二种是强制切换。第三种储藏的修改并切换分支。

  • 方式一
git commit --all
git checkout a-branch
           
  • 方式二

    git checkout --force a-branch

  • 方式三
git stash
git checkout a-branch
//做一些修改并提交,在切回原来的分支
git stash pop
           

重置分支指针

分支指针每一次提交时都会移动到最新的提交上。通常情况下不太需要去设置分支指针。但是有时候我们会丢失的钙质人的。追踪想要恢复到之前的状态,就需要通过重置分支指针来实现。注意它与

git reset --hard 39rt54b

注意这个命令会覆盖当前工作区和暂存区所有的修改,最好使用git stash 来储存一下修改。

合并分支

快速合并,开发者们在a分支下进行开发,而b分支上什么都不做。当b与a进行分支合并的时,git就变得非常简单。但是这样的合并并不会产生新的commit节点。

git merge --no--ff a-branch

这个命令可以强制产生一次新的提交。

变基操作

将git提交复制到其他地方,尽管修改与元数据保持不变。但是复制的结果会产生一个新的提交。这种方式被称为复制提交。通常复制提交有两个命令,git rebase和git cherry-pick

git rebase

通常这个命令你用来理顺历史提交,或者将一个分支上的提交复制到另一个分支上。

git rebase master --onto release1

解释: 当前分支是feature-a master是原分支 release1 目标分支。 git会确认活动分支上所有不属于原分支的提交,通过–onto选项将这些提交拷贝目标分支。如git学习指南上的60页图8-3

cherry-pick

摘樱桃,主要用于捡取操作。如将一些bug的修复传递到各个不同的发行版本中。还有另一种应用,从即将删除的分支中转移一些有用的提交。

版本标签

创建一个普通标签

git tag 1.0.0 master -m "发布的第一个版本"
           

推送某个单一标签

git push origin 1.0.0
           

查看某个特定的功能,或者bug修复是否包含在客户所安装的那个版本。

git tag --contains f63cd77
           

技巧

找回丢失的修改

git像一条狗,它闻出你的恐惧

git通常不会立即删除版本中的对象。无论什么时候,我们修改了一些东西也好。在版本库中始终是新建了一些对象而已。旧的对象都不会被删除,即使我们调用了gc命令。git 会持续跟踪一个分支上所发生的所有修改,并将这些所谓的日志存在logs目录下。可以通过–walk-reflogs选项来显示一个分支的本地记录。

git log --walk-reflogs mybranch

只要我们找到丢失的修改就可以通过cherry-pick命令和rebase命令将丢失的提交找回来。

忽略一些已被版本化的文件

通常我们不希望一些修改被版本化,我们可以临时性的忽略这个文件。

git update-index --assume-unchange  foo.txt
//暂时忽略这个文件。以后的add  或者 status  就不会被显示发生的修改
git update-index --really-refresh
//停止临时性忽略