当前位置:   article > 正文

本地仓库连接远端仓库 git pull 和 git push_如何配置本地进行git pull以及push

如何配置本地进行git pull以及push

1. 本地没有项目

  1. 新建远程仓库
  2. 创建一个空文件夹,然后git clone 远程仓库地址
  3. 新建 .gitignore 文件
  4. 在此文件夹开始新建项目

2. 本地已经存在项目

奇淫巧技

  1. 创建一个空文件夹,然后git clone 远程仓库地址
  2. 将本地项目复制到该文件夹,新建 .gitignore 文件,然后提交

实践

方式一:

  1. 打开本地项目文件夹,右键菜单 git bash here,或者在命令行中 cd 到项目文件夹
  2. git 初始化 git init新建 .gitignore 文件
  3. 将项目提交到暂存区 git add .
  4. 连接本地仓库和远程仓库 git remote add <remote> 远程仓库地址,默认为 origin
  5. 获取远程仓库的最新代码git pull <remote> <branch> --allow-unrelated-histories
    1. git fetch <remote> <branch>
    2. git merge --allow-unrelated-histories
  6. 将项目提交到本地仓库git commit -m 本次提交的说明信息
  7. 推送到远程仓库git push -u <remote> <branch>

方式二:

  1. 打开本地项目文件夹,右键菜单 git bash here,或者在命令行中 cd 到项目文件夹
  2. git 初始化 git init新建 .gitignore 文件
  3. 将项目提交到暂存区 git add .
  4. 连接本地仓库和远程仓库 git remote add <remote> 远程仓库地址,默认为 origin
  5. 新建同名本地分支建立跟踪关系:**git checkout --track <remote>/<branch>**
  6. 获取远程仓库的最新代码git pull --allow-unrelated-histories
    1. git fetch
    2. git merge --allow-unrelated-histories
  7. 将项目提交到本地仓库git commit -m 本次提交的说明信息
  8. 推送到远程仓库git push

git pull

本地分支的上游分支(跟踪分支)upstream

git pull 其实是 git fetch (获取远端代码)和 git merge(合并分支) 的集合写法。

为什么直接使用 git pull 不行,而要使用 git pull origin master 呢?

因为远程仓库可能有很多分支,git 需要知道本地当前分支的上游分支是哪个。
如果没有指定上游分支,则 git fetch 就需要明确写出是从远程仓库的哪个分支获取代码。

上游分支相关操作

查看上游分支:

  • git status
  • git branch -vv
$ git status
On branch master
Your branch is up to date with 'gitee/master'.
  • 1
  • 2
  • 3

指定上游分支。我们可以直接指定,也可以在 git push 中指定,或者新建分支设置跟踪关系:

  • 显示指定:
    • git branch --set-upstream-to=<origin>/<branch> [<本地分支>]
  • 如果没有指定上游分支,push 就会报错,此时也能指定 upstream 分支。
fatal: The current branch new has no upstream branch.
To push the current branch and set the remote as upstream, use

	git push --set-upstream origin main
  • 1
  • 2
  • 3
  • 4
  • 新建分支设置跟踪关系并切换分支:
    • git checkout -b 本地分支 --track <remote>/<branch>
    • 以远程分支为蓝本新建本地同名分支,建立跟踪关系并切换分支:
      • **git checkout --track <remote>/<branch>**

如果想要删除分支的upstream信息,可以使用命令:

  • git branch --unset-upstream (删除当前分支的upstream信息)

拒绝合并不相干的历史

git pull 为什么需要 --allow-unrelated-histories?

第一次 git pull,其中的 git fetch 是没有问题的,但是 git merge 就会报错。

  • 注意:git fetch 成功后,内容不会在工作目录展示,所以啥也看不到。

错误提示:fatal: refusing to merge unrelated histories拒绝合并不相干的历史。

错误原因:

--allow-UNrelated-histories

简单来说就是:过去git merge允许将两个没有共同基础的分支进行合并,这导致了一个后果:新创建的项目可能被一个毫无戒备的维护者合并很多没有必要的历史,到一个已经存在的项目中,目前这个命令已经被纠正,但是我们依然可以通过--allow-unrelated-histories选项来逃逸这个限制,来合并两个独立的项目;

什么是有共同基础的分支?

rebase

远程仓库和本地仓库之间没有共同的基础,都是独自的一条链。在 git 看来,这就是两个完全独立的项目。现在两个独立的项目想要 git merge 合并,就进行了一些默认限制。

git push

push 的完整语法:git push 远程仓库别名 本地分支名:远端分支名

  • 如果本地分支与远端分支同名,则可省略写:git push origin master
  • 如果直接省略写,如git push origin hhh,但远端没有 hhh 分支,那会在远端创建同名的 hhh 分支

为什么有时候可以简写成 git push,有时候简写会报错?
因为在git的全局配置中,有一个push.default属性,其决定了git push操作的默认行为。在Git 2.0之前,这个属性的默认被设为’matching’,2.0之后则被更改为了’simple’。

git push 默认行为

push.default


push.default的可选值:nothing , current , upstream , simple , matching

  • nothing : 无默认操作,需要显示地指定远程分支;eg : git push origin branchname
  • current : push 当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支
  • upstream : push 当前分支到它的 upstream 上游分支上
  • simple : 与 upstream 类似,但有一点不同,就是simple 必须保证本地分支和它的上游分支 upstream 必须同名,否则会拒绝 push 操作。
  • matching : push 所有本地和远程两端都存在的同名分支

因为 simple 这个同名的要求,所以 github 主分支改为 main,本地分支默认依然为 master 的情况下,明明已经设置了上游分支,git push 还是会报错。

fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push gitee HEAD:test

To push to the branch of the same name on the remote, use

    git push gitee HEAD

To choose either option permanently, see push.default in 'git help config'.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

为了之后方便的使用 git push 来完成推送,现在要么改掉 push 的默认行为为 upstream,或者在设置上游分支的时候保持本地分支和上游分支同名。

  • 修改 push 默认行为配置:git config --global push.default upstream
  • 保持分支同名:新建同名的本地分支并跟踪远程分支。git branch --track <remote>/<branch>

建议使用新建分支的方式。

更多介绍:

3. .gitignore 文件

Git 忽略文件可以不用自己写,GitHub 上有现成的可以根据需求自己组合过滤规则。

// 常用的
node_moudel
/dist
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/546156
推荐阅读
相关标签
  

闽ICP备14008679号