loading...

3

git命令

工具读完大概需要13分钟

  • 发布时间:2018-07-21 10:46 星期六
  • 刘伟波
  • 385
  • 更新于2019-04-29 10:34 星期一

git命令

正常提交

git add .
git commit -m "提交内容"
git pull
git push origin 分支名

初始化

设置用户名,邮箱

git config --global user.name "Author Name"
git config --global user.email "Author Email"

查看邮箱用户名等选项

gitc onfig --list

初始化一个Git仓库,使用git init命令。
第一步,使用命令git add .,添加全部 ,注意,可反复多次使用,添加多个文件;
第二步,使用命令git commit -m "提交的注释",完成。

运行git status命令看看结果
运行git diff这个命令可查看我们修改了什么内容
第一步:git add .
第二步:git commit -m "写改动的注释"

版本回退

通过git log来查看版本(加上--pretty=oneline参数查看关键信息):
git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

删除之前的提交记录

找到提交的commit_id,
git checkout <commit_id>,然后git push origin <commit_id> --force,这个要慎重,删除了就没有了。

工作区和暂存区

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

撤销修改

git reflog 记录每一次操作,可进行回滚
git 优雅的撤销中间某次提交?
https://blog.csdn.net/u013066244/article/details/79920012

有时候我们希望只合并某个分支上的某次修改commit到指定的分支上.那么就可以使用cherry-pick命令来操作了.

使用git log 查看提交的信息,记住commit id.

git checkout 要修改的分支

git cherry-pick 某个commit id // 把某个commit id的提交合并到当前分支.

在修改了文件之后,且还没有add之前,可执行以下命令丢弃工作区的修改。

$ git checkout –- readme.txt

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令

如果你想要修改,已经git add到暂存区,但还没有commit的内容。
我们可以用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:

$ git reset HEAD readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

将当前提交撤回到commitB_hash

git reset –-hard commitB_hash

将工作区,暂存区强制恢复成 commitB_hash的状态

git reset  commitB_hash

Git的4个阶段的撤销更改

git stash用法

保存当前修改

git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。stash是本地的,不会通过git push命令上传到git server上。

重新应用缓存的stash

可以通过git stash pop命令恢复之前缓存的工作目录,这个指令将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下

查看现有stash

可以使用git stash list命令, 点击查看更多stash用法

删除文件

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

$ rm test.txt

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- test.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

分支管理

git查看当前分支所属

git branch -vv

创建与合并分支
首先创建dev分支,然后切换到dev分支

$ git checkout –b dev
git checkout - (-代表上一个分支名,这里是简写)
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

git branch –a 查看当前仓库的所有分支;git branch –r查看远程仓库的所有分支

dev分支的工作成果合并到master分支上:

$ git merge dev

修改分支

如果对于分支不是当前分支,可以使用下面代码:

 git branch -m 原名 新

如果是当前,那么可以使用加上新名字

git branch -m 原名 

混乱的分支

报错$ git checkout -b *** fatal: cannot lock ref 'refs/heads/***': 'refs/heads/***' exists; cannot create 'refs/heads/user/***'

git remote prune origin

小结

  • 查看分支:git branch

  • 创建分支:git branch

  • 切换分支:git checkout

  • 创建 切换分支:git checkout -b

  • 合并某分支到当前分支:git merge

  • 删除分支:git branch -D

  • 提交:git branch origin 远程分支名称

自定义Git

配置命令别名
本节是教你如何偷懒的。
如果敲git st就表示git status那就简单多了,当然这种偷懒的办法我们是极力赞成的。
我们只需要敲一行命令,告诉Git,以后st就表示status

$ git config --global alias.st status

当然还有别的命令可以简写,很多人都用co表示checkoutci表示commitbr表示branch

其它技巧

之前上传过的文件夹想要忽略怎么办?这行这个,然后正常提交ok
git rm -r --cached .

撤销远程操作

已经提交到远程了,不想要了,怎么办?

git reset --hard [commit_id]
git push origin [分支名]

这个操作非常危险,如果别人也提交了,他的也会不存在

git 子模块

克隆所有子模块

git clone --recursive git://github.com/foo/bar.git

如果已经克隆了

git submodule update --init --recursive

添加

为当前工程添加submodule,命令如下

git submodule add 仓库地址 路径

其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。
注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone),不写路径默认当前文件夹

命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件,其中记录了子模块的信息。添加完成以后,再将子模块所在的文件夹添加到工程中即可。

删除

submodule的删除稍微麻烦点:首先,要在“.gitmodules”文件中删除相应配置信息。然后,执行“git rm –cached ”命令将子模块所在的文件从git中删除。

下载的工程带有submodule

当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:

git submodule update --init --recursive

即可将子模块内容下载下来后工程才不会缺少相应的文件。

修改子模块并提交

进入子模块目录下,进行git add .,git commit -m "",git push origin origin操作
最后在主模块提交

git 钩子

pre-commit 钩子在键入提交信息前运行。 它用于检查即将提交的快照,例如,检查是否有所遗漏,确保测试运行,以及核查代码。 如果该钩子以非零值退出,Git 将放弃此次提交,不过你可以用 git commit --no-verify来绕过这个环节。 你可以利用该钩子,来检查代码风格是否一致(运行类似 lint 的程序)、尾随空白字符是否存在(自带的钩子就是这么做的),或新方法的文档是否适当。

"pre-commit": [
    "lint"
  ],
  "scripts": {
    "lint": "eslint --ext .js, src",
    "lint:fix": "npm run lint -- --fix"
  },

git提交前会验证lint命令

更多查看https://github.com/k88hudson/git-flight-rules/blob/master/README_zh-CN.md

在线学习git使用 https://learngitbranching.js.org/

作者:刘伟波

链接:http://www.liuweibo.cn/p/205

来源:刘伟波博客

本文原创版权属于刘伟波 ,转载请注明出处,谢谢合作

你可能感兴趣的文章

    发表评论

    评论支持markdown,评论内容不能超过500字符,如果内容过多或者要及时回复,建议去 segmentfault平台, 也可以来我的直播间来提问。
    关于技术问题或者有啥不懂的都可以留言, 我会定期回复答疑, 也可以来 我的直播间 提问, 推荐最新仓库 前端知识体系, 感謝支持!