首页 > 其他分享 >Git 与远程分支

Git 与远程分支

时间:2024-09-27 09:33:45浏览次数:1  
标签:git gitee github LearnGit Git push 远程 分支

90.远程仓库和分支

我们经常需要对远程仓库里的分支进行更新。

当从远程库 clone 时,默认情况下,只会拉取 master ​分支,并且会将本地的 master 分支和远程的 master 分支关联起来:

$ git branch
* master

推送本地分支

推送分支,就是把该分支上的所有本地提交推送到远程库。本地新建的分支如果不推送到远程,对其他人就是不可见的。

推送时,要指定本地分支,这样,Git 就会把该分支推送到远程库对应的远程分支上:

$ git push origin master

如果要推送其他分支,比如 dev​,就改成:

$ git push origin dev

实践(先确保工作区是 clean 的):

$ git switch -c remotebranch
Switched to a new branch 'remotebranch'

# 创建一个新的文件夹
$ mkdir 4-remotebranch

$ echo "remote branch" >> ./4-remotebranch/remote.txt
$ git add .
$ git commit -m "add remote.txt"
$ git push gitee remotebranch

然后我们在另一个目录里克隆该项目:

$ git clone [email protected]:peterjxl/LearnGit.git

$ ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023-01-15     12:03                1-diffAndPath
d-----        2023-01-15     12:03                2-versionControl
d-----        2023-01-15     12:03                4-diff
-a----        2023-01-15     12:03              9 .gitignore
-a----        2023-01-15     12:03             34 readme.md

可以看到是没有 4-remotebranch 这个文件夹的。

注意:

  1. origin 和分支名请修改为自己的
  2. 并不是一定要把所有本地分支往远程推送,这取决于该分支是否要和其他小伙伴合作开发

拉取远程分支

多人协作时,大家都会往 master ​和 dev ​分支上推送各自的修改。我们一般会定期(比如每天)从分支上拉取最新的代码。

如何查看远程分支上有什么分支呢?可以用 git branch -r​:

$ git branch -r
  gitee/feature
  gitee/master
  github/feature
  github/master

如果涉及到多人开发一个分支,但我们从远程仓库 clone 的时候,只有 master 分支;

这时就得拉取远程 origin ​的 dev ​分支到本地,并关联起来:

$ git switch -c dev origin/dev

这样,我们就可以在 dev ​上继续修改,并时不时地把 dev ​分支 push ​到远程:

$ git add env.txt
$ git commit -m "add env"
$ git push origin dev

而其他开发 dev 分支的小伙伴,则需要定期从 dev 分支拉取更新:

$ git pull

拉取的时候可能会有冲突,需要手动解决,参考前几篇博客。

如果 git pull ​提示 no tracking information​,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch --set-upstream-to <branch-name> origin/<branch-name>​。

实践:我们接着上面的例子来,创建一个分支并关联:

$ git switch -c remotebranch origin/remotebranch
Switched to a new branch 'remotebranch'
branch 'remotebranch' set up to track 'origin/remotebranch'.


$ ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023-01-15     12:03                2-versionControl
d-----        2023-01-15     12:03                3-branch
d-----        2023-01-15     12:03                4-diff
d-----        2023-01-15     12:03                4-remotebranch
-a----        2023-01-15     12:03              9 .gitignore
-a----        2023-01-15     12:03             34 readme.md

此时我们可以看到,当前目录下有 4-remotebranch 这个文件夹了。

注意:在拉取远程分支之前,最好先 git pull 一下。不然可能找不到该分支。

git fetch

git fetch ​是将远程主机的最新内容拉到本地仓库

git pull​ 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge​,这样可能会产生冲突,需要手动解决。

相比之下,git fetch 是一个更安全的选择,因为它从你的远程仓库拉入所有的提交,但不会对你的本地文件做任何修改。你可以在合并前检查哪些文件有变化,哪些文件可能导致冲突。

分支改名

之前我们说过了怎么修改分支名:

$ git branch -m <old_branch_name> <new_branch_name>

但这样是仅能修改本地的分支名的,如果远程仓库上也有该分支,并且想要改名,还需进行以下步骤。

推送这个新分支,从而创建一个新的远程分支:

$ git push origin <new_branch_name>

然后删除远程分支:

$ git push origin -d -f <old_branch_name>

同时推送多个仓库

先前,我们添加了两个远程参考,一个 Gitee,一个 GitHub。如果我们要推送,需要分别推送分支到两个仓库上,有没办法一次性就推送两次呢?有的。

比如,我们想推送到 Gitee 的时候,默认也推送到 GitHub,那么可以给 gitee 添加一个远程的 push 地址,这样一次 push 就能同时 push 到两个地址上面

语法格式:

$ git remote set-url --add 远程仓库名 另一个仓库的push地址

例如:

$ git remote -v
gitee   [email protected]:peterjxl/LearnGit.git (fetch)
gitee   [email protected]:peterjxl/LearnGit.git (push)
github  [email protected]:Peter-JXL/LearnGit.git (fetch)
github  [email protected]:Peter-JXL/LearnGit.git (push)



git remote set-url --add gitee [email protected]:Peter-JXL/LearnGit.git


$ git remote -v //查看是否多了一条push地址
gitee   [email protected]:peterjxl/LearnGit.git (fetch)
gitee   [email protected]:peterjxl/LearnGit.git (push)
gitee   [email protected]:Peter-JXL/LearnGit.git (push)
github  [email protected]:Peter-JXL/LearnGit.git (fetch)
github  [email protected]:Peter-JXL/LearnGit.git (push)

至此,我们就可以直接一个 push,同时推送到两个 git 地址。我们来测试下:

$ echo "test push two repository" >> 4-diff/testDiff.txt
$ git add 4-diff/testDiff.txt
$ git commit -m "add test push two repository"

$ git push gitee
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 20 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (12/12), 946 bytes | 946.00 KiB/s, done.
Total 12 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:peterjxl/LearnGit.git
   378332f..5ba73a6  master -> master
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 20 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (12/12), 946 bytes | 946.00 KiB/s, done.
Total 12 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), completed with 1 local object.
To github.com:Peter-JXL/LearnGit.git
   378332f..5ba73a6  master -> master

可以看到 git push 的输出中,既有 Gitee 的输出,也有 GitHub 的输出。

如果不想同时推送多个仓库,可删除 push 地址:

$ git remote set-url --delete origin 地址

以上配置是在 .git/config ​文件里存储的。我们也可以通过直接修改该文件来达到配置的效果

原始内容:

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "gitee"]
        url = [email protected]:peterjxl/LearnGit.git
        fetch = +refs/heads/*:refs/remotes/gitee/*
[branch "master"]
        remote = gitee
        merge = refs/heads/master
[remote "github"]
        url = [email protected]:Peter-JXL/LearnGit.git
        fetch = +refs/heads/*:refs/remotes/github/*

我们在 Gitee 里,添加一行:

url = [email protected]:Peter-JXL/LearnGit.git

修改后:

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "gitee"]
        url = [email protected]:peterjxl/LearnGit.git
        fetch = +refs/heads/*:refs/remotes/gitee/*
        url = [email protected]:Peter-JXL/LearnGit.git
[branch "master"]
        remote = gitee
        merge = refs/heads/master
[remote "github"]
        url = [email protected]:Peter-JXL/LearnGit.git
        fetch = +refs/heads/*:refs/remotes/github/*

标签:git,gitee,github,LearnGit,Git,push,远程,分支
From: https://www.cnblogs.com/PeterJXL/p/18435035

相关文章

  • 《HelloGitHub》第 102 期
    兴趣是最好的老师,HelloGitHub让你对编程感兴趣!简介HelloGitHub分享GitHub上有趣、入门级的开源项目。github.com/521xueweihan/HelloGitHub这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言Python、Java、Go、C/C++、Swift...让你在短......
  • 远程腾讯云服务器cd : file/: Permisson denied
    这是由于权限问题。一般登录服务器后会自己创建一个新的用户,比如叫leung。adduserleung#创建用户acsusermod-aGsudoleung#给用户acs分配sudo权限如果上面出现不允许,那就加上sudo再执行。但是有时候我们cdleung时也会出现不允许的情况,我们可以直接如下操作:chm......
  • 掌握 GitHub Webhook:综合指南
    GitHubWebhooks提供了一种强大的方法来自动化工作流程并将GitHub与外部服务集成,根据存储库中的事件提供实时更新。无论您是想触发部署、发送通知还是跨平台同步数据,GitHubwebhooks都提供了灵活高效的解决方案。在本指南中,我们将探讨GitHubWebhooks是什么、它们如何工作以......
  • 掌握 Git:如何删除本地、合并和远程分支
    在软件开发领域,有效的版本控制对于确保顺利协作和项目管理至关重要。Git是使用最广泛的版本控制系统之一,了解如何有效地处理分支可以节省时间并防止错误。在本文中,我们将探讨如何管理本地、合并和远程Git分支,重点关注有助于简化工作流程的命令。删除本地Git分支在处理项目时......
  • git 清除二进制文件的 changes 状态
    问题:某个分支上修改了二进制文件,导致changes一直存在,切换到主分支也仍然存在,点击Discard也没用使用gitreset--hard还原到初始状态,也不行,不过输出结果会给出错误信息Encountered7file(s)thatshouldhavebeenpointers,butweren't:解决方法:根据这个线索......
  • plc网关为plc远程控制提供可靠技术支持-天拓四方
    PLC网关是用于实现PLC远程访问、监控、控制和数据交换的硬件设备。它充当PLC设备与外部网络之间的桥梁,支持多种通信协议(如Modbus、Profinet、Ethernet/IP等)和接口(如以太网、Wi-Fi、蓝牙等),能够将PLC的运行状态数据传输到云平台或本地服务器,实现远程监控和管理。此外,PLC网关还具备较......
  • Git 基本操作
    目录一、基本概念1、工作区域2、文件状态二、基本使用1、设置用户标识2、初始化仓库3、提交文件到暂存区4、提交到本地库5、推送到远程仓库5.1错误说明6、克隆三、分支操作1、查看分支2、创建分支3、切换分支4、合并分支5、删除分支6、上传分支四、替换本地改动五、......
  • Git-如何区分使用个人账户和公司账户
    个人日常编写点小玩具,code的版本控制一般托管于GitHub,但是公司内部使用GitLb来进行代码版本控制,这样为了能够在同一台MacBook(自带,公司有补贴)日常区分出两个账户,通过翻阅资料做了如下配置。操作环境MacBookGit(gitversion2.39.5)命令行终端SSH密钥生成在终端,使......
  • 20240924_082514 c语言 switch分支结构
    语法演练体验switch的用法比较多路if一个个的比vs精准定位case穿透体验没有break的情况......
  • Github使用技巧
    1、怎么查找对应关系 一般查找对应关系,可以去阅读下面的说明: 2、0.20.Release版本不存在的问题如上图:根本不知道0.2.1.RELEASE对应的dubbo-spring-boot-start版本是多少,在maven仓库中根本没有这个版本解释:这里需要我们点击这个版本,然后就会跳转到这个代码上,如下图: ......