git命令回顾

git init :初始化本地仓库 ,相当于创建一个工作环境 ,并且在已存在的工作目录同样的使用。

git clone (http地址)或ssh地址) :克隆一个指定仓库,http仓库只能拉取资源, ssh可以推上和拉取资源。

git remote 添加远程仓库地址

ssh密匙生成方式在gitbash 输入ssh-keygen -t rsa -C “[email protected]” 把pb内容粘贴到远程仓库网站用户设置中的ssh key,就能push资源了。

git push origin master : origin是默认的远程仓库地址,mater是默认主分支,在git init时创建。origin和 mater是可以选择的,意味着可以任意选择远程仓库与分支。

git pull origin master:拉取资源 并自动合并(两个毫不相关的目录是不会合并的,git会记录目录的生命历程,判断是否相关)

git fetch origin master :从远程仓库拉取与本地不一样的资源,需要手动合并才能继续使用。

git branch testing: testing 是新分支名,输入git branch会显示当前本地仓库的所有分支,git branch -d 能删除不需要的分支。

git merge testing :合并testing到当前分支,git会自动合并资源,当出现两个分支都修改的地方,git不知道选择使用那个分支,就会出现冲突,需要手动修改文件,解决冲突。

git add * :添加所有文件到缓存层,可以指定文件到缓存层。

git commit :把所有缓存区的文件放进最终状态,推送到远程仓库的最终状态。git会维护commit历史,并可选择的回滚。

这里写图片描述

Reset

在提交层面上,reset 将一个分支的末端指向另一个提交。这可以用来移除当前分支的一些提交。比如,下面这两条命令让 hotfix 分支向后回退了两个提交。

git checkout hotfix
git reset HEAD~2
hotfix 分支末端的两个提交现在变成了悬挂提交。也就是说,下次 Git 执行垃圾回收的时候,这两个提交会被删除。换句话说,如果你想扔掉这两个提交,你可以这么做。reset 操作如下图所示:
这里写图片描述
把hotfix分支reset到HEAD~2

如果你的更改还没有共享给别人,git reset 是撤销这些更改的简单方法。当你开发一个功能的时候发现「糟糕,我做了什么?我应该重新来过!」时,reset 就像是 go-to 命令一样。

除了在当前分支上操作,你还可以通过传入这些标记来修改你的缓存区或工作目录:

–soft – 缓存区和工作目录都不会被改变
–mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
–hard – 缓存区和工作目录都同步到你指定的提交
把这些标记想成定义 git reset 操作的作用域就容易理解多了。
这里写图片描述
git rese的定义域

这些标记往往和 HEAD 作为参数一起使用。比如,git reset –mixed HEAD 将你当前的改动从缓存区中移除,但是这些改动还留在工作目录中。另一方面,如果你想完全舍弃你没有提交的改动,你可以使用 git reset –hard HEAD。这是 git reset 最常用的两种用法。

当你传入 HEAD 以外的其他提交的时候要格外小心,因为 reset 操作会重写当前分支的历史。正如 rebase 黄金法则所说的,在公共分支上这样做可能会引起严重的后果。

Checkout

你应该已经非常熟悉提交层面的 git checkout。当传入分支名时,可以切换到那个分支。

git checkout hotfix
上面这个命令做的不过是将HEAD移到一个新的分支,然后更新工作目录。因为这可能会覆盖本地的修改,Git 强制你提交或者缓存工作目录中的所有更改,不然在 checkout 的时候这些更改都会丢失。和 git reset 不一样的是,git checkout 没有移动这些分支。
这里写图片描述
将 HEAD 从 master 移到 hotfix

除了分支之外,你还可以传入提交的引用来 checkout 到任意的提交。这和 checkout 到另一个分支是完全一样的:把 HEAD 移动到特定的提交。比如,下面这个命令会 checkout 到当前提交的祖父提交。

git checkout HEAD~2
将 HEAD 移动到任意 commit
这里写图片描述
这对于快速查看项目旧版本来说非常有用。但如果你当前的 HEAD 没有任何分支引用,那么这会造成 HEAD 分离。这是非常危险的,如果你接着添加新的提交,然后切换到别的分支之后就没办法回到之前添加的这些提交。因此,在为分离的 HEAD 添加新的提交的时候你应该创建一个新的分支。

Revert

Revert 撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中。

git checkout hotfix
git revert HEAD~2
如下图所示:
这里写图片描述
revert到倒数第二个commit

相比 git reset,它不会改变现在的提交历史。因此,git revert 可以用在公共分支上,git reset 应该用在私有分支上。

你也可以把 git revert 当作撤销已经提交的更改,而 git reset HEAD 用来撤销没有提交的更改。

就像 git checkout 一样,git revert 也有可能会重写文件。所以,Git 会在你执行 revert 之前要求你提交或者缓存你工作目录中的更改。

猜你喜欢

转载自blog.csdn.net/qq_36425506/article/details/78471469