Git进阶操作 | 豆包MarsCode AI刷题

89 阅读2分钟
title: 远程仓库

显示当前关联仓库

在本地可以使用下方命令查看关联的远程仓库

$ git remote
​

因为没有添加远程仓库,所以结果此时为空。

添加远程仓库

在 GitHub / Gitee 上创建的仓库路径为。本文使用的是 Gitee ,GiteHub 操作同理。 现在使用 git remote add 命令将它设置成本地仓库的远程仓库。

$ git remote add origin https://gitee.com/[用户名]/git-demo.git

根据上述格式执行命令后,Git会自动将远程仓库的名称设置为 origin 。

推送代码

推送到 master 分支

如果想将当前分支下本地仓库中的内容推送给远程仓库,需要用到git push命令。

$ git push -u origin master
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 16 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (9/9), 898 bytes | 449.00 KiB/s, done.
Total 9 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/[用户名]/git-demo.git
   3732a3e..2cdff87  master -> master
branch 'master' set up to track 'origin/master'.
​

像这样执行git push命令,当前分支的内容就会被推送给远程仓库 origin 的master分支。-u 参数可以在推送的同时,将origin仓库的 master 分支设置为本地仓库当前分支的 upstream(上游)。添加了这个参数,将来运行 git pull 命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从 origin 的 master 分支获取内容,省去了另外添加参数的麻烦。 执行该操作后,当前本地仓库 master 分支的内容将会被推送到 GitHub 的远程仓库中。

推送到其他分支

除了 master 分支之外,远程仓库也可以创建其他分支。举个例子,我们在本地仓库中创建 dev 分支,并将它以同名形式 push 至远程仓库。

$ git checkout -b dev
Switched to a new branch 'dev'
​

我们在本地仓库中创建了 dev 分支,现在将它 push 给远程仓库并保持分支名称不变。

$ git push -u origin dev
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
remote: Create a pull request for 'dev' on Gitee by visiting:
remote:     https://gitee.com/[用户名]/git-demo/pull/new/[用户名]:dev...[用户名]:master
To https://gitee.com/[用户名]/git-demo.git
 * [new branch]      dev -> dev
branch 'dev' set up to track 'origin/dev'.

现在就可以在远程仓库中找到新创建的分支 dev 了。

所在本地分支的名称与远程仓库分支名称相同

如果想要从本地仓库的 master 分支推送到远程仓库的 pro 分支,使用上方的命令会报错的,需要使用下方命令

$ git push -u origin master:pro
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
remote: Create a pull request for 'pro' on Gitee by visiting:
remote:     https://gitee.com/[用户名]/git-demo/pull/new/[用户名]:pro...[用户名]:master
To https://gitee.com/[用户名]/git-demo.git
 * [new branch]      master -> pro
branch 'master' set up to track 'origin/pro'.
​

划重点

  1. 在推送代码到主分支时出现以下错误 转存失败,建议直接上传图片文件 原因在于在创建远程仓库时,默认生成了 README.md 文档,导致了一些文件在本地仓库和远程仓库上不一致。 可以使用git pull --rebase origin master命令将远程仓库同步到本地,然后就可以正常提交了。
  2. 如果本地仓库的版本低于远程仓库的版本,默认无法进行推送。 转存失败,建议直接上传图片文件

此时有两种解决方法将本地仓库与远程仓库的代码同步。 解决方法一:

$ git fetch
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), 605 bytes | 31.00 KiB/s, done.
From https://gitee.com/[用户名]/git-demo
   2cdff87..4d87bc4  master     -> origin/master
​

git fetch 会将代码从远程仓库下载下来,但不会将代码和当前分支自动合并,也就是说本地仓库的代码并不会发生改变。要想改变本地仓库的内容,需要手动将本地仓库与远程仓库进行合并。

$ git merge origin/master

执行上方代码会将当前分支(master)与远程仓库的 master 分支进行合并,此时再进行查看本地仓库和远程仓库的代码就相同了。

解决方法二:

$ git pull

git pull 会将远程仓库的代码拉取下来并自动合并

删除远程仓库

$ git remote remove origin

执行上方命令行,本地仓库与远程仓库(origin)的关联会断开,此时就无法想远程仓库推送内容。

获取远程仓库

获取 master 分支

$ git clone https://gitee.com/[用户名]/git-demo.git
Cloning into 'git-demo'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 13 (delta 3), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (13/13), done.
Resolving deltas: 100% (3/3), done.

0. 默认情况下,本地上从远程仓库拉取的目录名称与远程仓库项目名称相同,如果想修改目录名称,在执行 clone 命令时加入新的目录名称。

git clone https://gitee.com/[用户名]/git-demo.git demo

2. 执行 git clone 命令后我们会默认处于 master 分支下,同时系统会自动将 origin 设置成该远程仓库的标识符。也就是说,当前本地仓库的 master 分支与远程仓库(origin)的master分支在内容上是完全相同的。

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master

获取 master 之外的分支

$ git clone -b dev https://gitee.com/[用户名]/git-demo.git

-b 参数的后面是想获取的远程仓库的分支名称。

title: tag

什么是tag

tag 是 git 版本库的一个标记,指向某个 commit 的指针。 tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 ...这样的标签。 tag 对应某次 commit, 是一个点,是不可移动的。 branch 对应一系列 commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。 所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。

tag的简单使用

创建 tag

使用 git tag <tagName>命令创建 tag。

$ git tag v1.0.0

还可以使用 git tag <tagName> <commit id>命令为指定版本号创建 tag。

$ git tag v0.0.5 5eb244a631812dfc61326de9fc99f171543f300f

查看tag列表

使用 git tag 命令可以直接列出所有的标签。

$ git tag 
v1.0.0

使用git tag -l xxxx 命令可以根据 xxxx 进行标签的筛选,可以通过通配符进行筛选。

$ git tag -l 'v2.0*'

删除tag

使用git tag -d <tagName>删除本地的tag

$ git tag
l
v1.0.0
v1.1.0$ git tag -d l
Deleted tag 'l' (was a63a8ba)
​
$ git tag
v1.0.0
v1.1.0