前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git常用命令

Git常用命令

作者头像
雨临Lewis
发布2022-01-12 12:33:14
3660
发布2022-01-12 12:33:14
举报
文章被收录于专栏:雨临Lewis的博客

git clone

克隆远程库到本地:

1 2 3 4 5 6 7

// 默认本地仓库名字与远程库一样 git clone https://github.com/jquery/jquery.git // 指定本地库名字为test git clone https://github.com/jquery/jquery.git test // git clone的仓库地址支持多种协议,通常使用最多的是http(s)和ssh协议,比如从GitHub上克隆仓库。

git remote

该命令用于管理远程库,当clone远程库到本地时,远程库将被自动命名为origin

git remote可以查询当前仓库下的所有远程库:

1 2

$ git remote origin

git remote -v可以查询当前仓库下的所有远程库对应的地址,一个远程库对应fetch和push两种操作,所以有两个地址。

1 2 3

$ git remote -v origin git@github.com:jquery/jquery.git (fetch) origin git@github.com:jquery/jquery.git (push)

git clone -o可以指定远程库的别名:

1 2 3

$ git clone -o jQuery https://github.com/jquery/jquery.git $ git remote jQuery

其他操作:

1 2 3 4 5 6 7 8 9 10 11

// 查看远程库的详细信息 git remote show <远程库别名> // 添加新的远程库 git remote add <远程库别名> <网址> // 删除远程库 git remote rm <远程库别名> // 重命名远程库的别名 git remote rename <原远程库别名> <新远程库别名>

git branch

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

// 创建本地分支 git branch <分支名> // 删除本地分支 git branch -d <分支名> git branch --delete <分支名> // 设置关联远程分支,新建的本地分支需要关联远程分支,被关联的远程分支要存在否则会报错 git branch --set-upstream-to=<远程库别名>/<远程分支名> <本地分支名> // 查看当前分支 git branch // 查看远程分支 $ git branch -r origin/master // 查看所有分支 // * master表明当前分支是master,对应的远程分支是origin/master $ git branch -a * master remotes/origin/master

git checkout

用于检出分支,从当前分支切换到另一个分支。切换分支时,要注意已暂存的文件或者提交。

1 2 3 4 5 6 7 8

// 切换到另一个已存在的分支 git checkout <分支名> // 基于当前分支创建并切换到新的分支 git checkout -b <新的分支名> // 基于远程分支创建并切换到新的分支 git checkout -b <新的分支名> <远程库别名>/<远程分支名>

git fetch

该命令用于将远程库的更新拉取到本地库:

1 2 3 4 5

// 获取远程库所有分支的更新到本地库 git fetch <远程库别名> // 获取指定分支的更新到本地库 git fetch <远程库别名> <分支名>

如果远程库的某个分支被删掉了,git fetch默认不会把这个删除操作同步到本地库,依然会看到被删掉的远程分支,这时候可以通过加上-p--prune参数来将被删掉的远程分支更新到本地:

1 2

git fetch --prune origin git fetch -p origin

git pull

该命令用于取回远程分支的更新,并将其合并到本地分支。

1 2 3 4 5 6 7 8 9

// 取回并合并到指定的本地分支 git pull <远程库别名> <远程分支名>:<本地分支名> // 如果是合并到当前分支可以不需要指明本地分支名 // git pull相当于git fetch + git merge git pull <远程库别名> <远程分支名> // 指定rebase方式合并 git pull --rebase <远程库别名> <远程分支名>:<本地分支名>

git有两种合并方式:merge和rebase,这两个合并方式存在一定的区别,不能误用。

git add

git add [参数] <路径>用于将工作区的文件添加到暂存区,可以多次使用git add命令将文件添加到暂存区中。暂存区中的文件可以通过git commit一次性提交到本地仓库。

1 2 3 4 5 6 7 8 9 10

// 将当前路径下修改的文件以及新增的文件添加到暂存区,不包括被删除的文件 git add . // 将当前路径下修改的文件和被删除的文件添加到暂存区,不包括新增的文件 // 相当于git add --update git add -u . // 将当前路径下的所有文件添加到暂存区,相当于上面两个命令的集合 // 相当于git add --all git add -A .

git push

用于推送本地分支的更新到远程分支,用法与git pull类似。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

// 推送本地分支到远程分支,注意这里的两个分支名顺序和pull是相反的 git push <远程库别名> <本地分支名>:<远程分支名> // 远程分支名可以省略,会自动推送到有关联关系的远程分支(通常都是和本地分支同名的),如果该远程分支不存在则会新建远程分支 git push <远程库别名> <本地分支名> // 本地分支名可以省略,此时表示推送空分支到远程分支 // 即删除远程分支 // demo: git push origin :master git push <远程库别名> :<远程分支名> // 删除远程分支 // demo: git push origin --delete master git push <远程库别名> --delete <远程分支名> // 推送本地所有分支到远程库 // demo: git push --all origin git push --all <远程库别名>

在push时,如果远程库的分支版本更新,则会push当前分支失败,需要先git pull合并到当前分支(可能需要解决冲突),然后再重新push。或者可以使用--force参数,强制覆盖掉远程分支,但是一般不建议这样做。

此外,git push不会推送tag,除非添加--tags参数。

git reset

该命令用于将仓库代码回退到指定的版本,通常会带上--hard参数。本地git仓库分为三个区域:工作区,暂存区和本地库。回退版本的命令有3个参数,与这三个区域有关。

--hard

  • 移动本地库HEAD指针
  • 重置工作区
  • 重置暂存区

回退版本后,本地库原本工作区和暂存区的文件将被清空,彻底变回指定版本的状态。

--soft

  • 移动本地库HEAD指针

回退版本后,仅仅移动了本地库的指针,工作区和暂存区文件保持不变。

--mixed

  • 移动本地库HEAD指针
  • 重置暂存区

回退版本后,本地库原本暂存区的文件将被清空。

可以通过实际情况来决定使用哪个参数,但在实际开发中,为了避免自己的工作成果被误删,最好先确保自己的改动已经提交到了本地库或者远程库。

对于误操作回退版本导致文件丢失的情况,可以参考这篇文章:关于git reset –hard命令!!!,未提交代码丢失找回

具体操作

首先切换到需要回退的分支:git checkout <分支名>

然后用git reset命令来回退到指定的版本,通常会带上--hard参数:

1 2 3 4 5 6 7 8 9

// 回退到上一个版本 git reset --hard HEAD^ // 回退到上上个版本 git reset --hard HEAD^^ // 每多回退一个版本,就多一个^ // 为了避免^太多,可以用~n来简化,n表示回退几次提交,默认是一次 git reset --hard HEAD~2

此外,也可以用commit id来回退到指定的版本。仓库的每次提交都会为其生成一个唯一的id(40位哈希值),可以通过git log来查看每个提交对应的commit id。

在回退版本时,可以用这个commit id来指定回退到对应的提交,不需要指定完整的commit id,只需要前7位字符(short commit id)即可。

1 2 3

// 比如仓库有一个提交:commit 26e1d228c71e69f0cb63fa73db8cc1ae3c6d8e87 // 现在回退到这一个提交时的版本 git reset --hard 26e1d22

如果不放心这个手动截取前七位字符的short commit id,可以用以下命令来得到:

1 2

git rev-parse --short 26e1d228c71e69f0cb63fa73db8cc1ae3c6d8e87 26e1d22

git tag

Git的tag用于给某个分支的某个提交打上标签,可以理解为一个别名,类似于浏览器收藏某个网页作为书签。

通常tag用于标记某个阶段性的某次提交作为重要节点,比如release了某个版本等。因为commit-id本身很长,不利于记忆,将这个commit打上tag,如v1.0.0等,以后就可以直接搜索这个tag来快速切换到对应的代码。

1 2 3 4 5 6

// 列出所有标签 git tag // 使用-l或--list查询指定的标签 // 查询条件区分大小写,可以使用通配符,如* git tag -l "v1.0.*"

创建标签如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

// 创建标签:分为轻量标签(lightweight)和附注标签(annotated) // 轻量标签只是对某个commit的引用 // 附注标签是存在在Git数据库中的一个完整对象,包括了打标签者、打标签时间、标签的附注信息等额外的信息。 // 可以通过git show <标签名>来看到这两种标签的信息 // 创建附注标签 git tag -a <标签名> -m "<备注信息>" // git tag -a v1.4 -m "my version 1.4" // 创建轻量标签,不需要指定任何参数 git tag <标签名> // git tag v1.4 // 上面都是对当前分支最新的commit创建标签,也可以对过去的某个commit打tag git tag -a <标签名> <commit-id> // git tag -a v1.4 26e1d22

其他操作如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

// git push默认不会把tag推送到远程库(但是pull默认会获取tag),需要显示推送标签,操作和推送分支一样 // 推送指定的标签到远程库 git push <远程库别名> <本地标签名> // git push origin v1.4 // 使用--tags参数来一次性推送所有不在远程库的标签 git push <远程库别名> --tags // git push origin --tags // 删除标签需要-d参数 git tag -d <标签名> // git tag -d v1.4 // 删除远程库标签有两种方式 // 方式一:将空标签推送到指定的远程库标签 git push <远程库别名> :refs/tags/<标签名> // git push origin :refs/tags/v1.4 // 方式二:使用--delete,需要Git版本大于v1.7.0才能使用 git push <远程库别名> --delete <标签名> // git push origin --delete v1.4 // 检出标签 // tag是快照读,直接检出到指定的tag会使仓库处于detached HEAD状态,此时不能更改代码 // 如果需要回到某个tag并修改代码,需要创建对应的分支。当在该分支上提交后,可能需要一个新的tag来标注最新的提交 git checkout -b <新建分支名> <标签名> // git checkout -b version1.4 v1.4

参考链接

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-022,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • git clone
  • git remote
  • git branch
  • git checkout
  • git fetch
  • git pull
  • git add
  • git push
  • git reset
    • --hard
      • --soft
        • --mixed
          • 具体操作
          • git tag
          • 参考链接
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档