git学习——远程分支

远程分支

远程分支(remote branch)是对远程仓库状态的索引。它们是一些无法移动的本地分支;只有在进行 Git 的网络活动时才会更新。远程分支就像是书签,提醒着你上次连接远程仓库时上面各分支的位置。

我们用 (远程仓库名)/(分支名) 这样的形式表示远程分支。比如我们想看看上次同 origin 仓库通讯时 master 的样子,就应该查看 origin/master 分支。如果你和同伴一起修复某个问题,但他们先推送了一个 iss53 分支到远程仓库,虽然你可能也有一个本地的 iss53 分支,但指向服务器上最新更新的却应该是 origin/iss53 分支。

可能有点乱,我们不妨举例说明。假设你们团队有个地址为 git.ourcompany.com 的 Git 服务器。如果你从这里克隆,Git 会自动为你将此远程仓库命名为 origin,并下载其中所有的数据,建立一个指向它的 master 分支的指针,在本地命名为 origin/master,但你无法在本地更改其数据。接着,Git 建立一个属于你自己的本地 master 分支,始于 origin master 分支相同的位置,你可以就此开始工作(见图 3-22):

要是你在本地 master 分支做了会儿事情,与此同时,其他人向 git.ourcompany.com 推送了内容,更新了上面的 master 分支,那么你的提交历史会开始朝不同的方向发展。不过只要你不和服务器通讯,你的 origin/master 指针不会移动(见图 3-23)。

可以运行 git fetch origin 来进行同步。该命令首先找到 origin 是哪个服务器(本例为 git.ourcompany.com),从上面获取你尚未拥有的数据,更新你本地的数据库,然后把 origin/master 的指针移到它最新的位置(见图 3-24)。

为了演示拥有多个远程分支(不同的远程服务器)的项目是个什么样,我们假设你还有另一个仅供你的敏捷开发小组使用的内部服务器 git.team1.ourcompany.com。可以用第二章中提到的 git remote add 命令把它加为当前项目的远程分支之一。我们把它命名为 teamone,表示那一整串 Git 地址(见图 3-25)。

现在你可以用 git fetch teamone 来获取小组服务器上你还没有的数据了。由于当前该服务器上的内容是你 origin 服务器上的子集,Git 不会下载任何数据,而只是简单地创建一个名为 teamone/master 的分支来指向 teamone 服务器上 master 所指向的更新 31b8e(见图 3-26)。

推送

要想和其他人分享某个分支,你需要把它推送到一个你拥有写权限的远程仓库。你的本地分支不会被自动同步到你引入的远程分支中,除非你明确执行推送操作。换句话说,对于无意分享的,你尽可以保留为私人分支,而只推送那些协同工作的特性分支。

如果你有个叫 serverfix 的分支需要和他人一起开发,可以运行 git push (远程仓库名) (分支名)

$ git push origin serverfix
Counting objects: 20, done.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (15/15), 1.74 KiB, done.
Total 15 (delta 5), reused 0 (delta 0)
To [email protected]:schacon/simplegit.git
 * [new branch]      serverfix -> serverfix

这其实有点像条捷径。Git 自动把 serverfix 分支名扩展为 refs/heads/serverfix:refs/heads/serverfix,意为“取出我的 serverfix 本地分支,推送它来更新远程仓库的 serverfix 分支”。我们将在第九章进一步介绍 refs/heads/ 部分的细节,不过一般使用的时候都可以省略它。也可以运行 git push origin serverfix:serferfix 来实现相同的效果,它的意思是“提取我的 serverfix 并更新到远程仓库的 serverfix”。通过此语法,你可以把本地分支推送到某个命名不同的远程分支:若想把远程分支叫作 awesomebranch,可以用 git push origin serverfix:awesomebranch 来推送数据。

接下来,当你的协作者再次从服务器上获取数据时,他们将得到一个新的远程分支 origin/serverfix

$ git fetch origin
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 15 (delta 5), reused 0 (delta 0)
Unpacking objects: 100% (15/15), done.
From [email protected]:schacon/simplegit
 * [new branch]      serverfix    -> origin/serverfix

值得注意的是,在 fetch 操作抓来新的远程分支之后,你仍然无法在本地编辑该远程仓库。换句话说,在本例中,你不会有一个新的 serverfix 分支,有的只是一个你无法移动的 origin/serverfix 指针。

如果要把该内容合并到当前分支,可以运行 git merge origin/serverfix。如果想要一份自己的 serverfix 来开发,可以在远程分支的基础上分化出一个新的分支来:

$ git checkout -b serverfix origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"

这会切换到新建的 serverfix 本地分支,其内容同远程分支 origin/serverfix 一致,你可以在里面继续开发了。

跟踪分支

从远程分支检出的本地分支,称为跟踪分支(tracking branch)。跟踪分支是一种和远程分支有直接联系的本地分支。在跟踪分支里输入 git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。反过来,在这些分支里运行 git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。

在克隆仓库时,Git 通常会自动创建一个 master 分支来跟踪 origin/master。这正是 git pushgit pull 一开始就能正常工作的原因。当然,你可以随心所欲地设定为其它跟踪分支,比如 origin 上除了 master 之外的其它分支。刚才我们已经看到了这样的一个例子:git checkout -b [分支名] [远程名]/[分支名]。如果你有 1.6.2 以上版本的 Git,还可以用 --track 选项简化:

$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"

要为本地分支设定不同于远程分支的名字,只需在前个版本的命令里换个名字:

$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "sf"

现在你的本地分支 sf 会自动向 origin/serverfix 推送和抓取数据了。

删除远程分支

如果不再需要某个远程分支了,比如搞定了某个特性并把它合并进了远程的 master 分支(或任何其他存放稳定代码的地方),可以用这个非常无厘头的语法来删除它:git push [远程名] :[分支名]。如果想在服务器上删除 serverfix 分支,运行下面的命令:

$ git push origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

咚!服务器上的分支没了。你最好特别留心这一页,因为你一定会用到那个命令,而且你很可能会忘掉它的语法。有种方便记忆这条命令的方法:记住我们不久前见过的 git push [远程名] [本地分支]:[远程分支] 语法,如果省略 [本地分支],那就等于是在说“在这里提取空白然后把它变成[远程分支]”。


1.创建 remote

mkdir my_project.git

git init --bare

2.创建本地git

cd my_project

git init

3.连接并提交

git add *  git commit -m "commit message"

git remote add origin ssh://[email protected]/~/my_project.git

git push origin master

4.提交分支数据到远程服务器

git push origin <local_branch_name>:<remote_branch_name>

5.从远程分支获取

git checkout --track origin/develop

6.查看服务器上的远程分支状况

git branch -r

7.删除远程分支

git push origin :develop

8.撤销暂存区的修改

git reset -- .



1.远程分支就是本地分支push到服务器上的时候产生的。比如master就是一个最典型的远程分支(默认)。

git push origin master
    
除了master之外,我们还可以随便创建分支,然后push到服务器上去。例如:
git push origin develop
    Counting objects: 27, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (15/15), done.
    Writing objects: 100% (15/15), 7.30 KiB, done.
    Total 15 (delta 10), reused 0 (delta 0)
    To [email protected]:projects/search.git
       1b95a57..779dbe1  develop -> develop
2.远程分支和本地分支需要区分,所以,在从服务器上拉取特定分支的时候,需要指定本地分支名字。
git checkout --track origin/develop
注意该命令由于带有--track参数,所以要求git1.6.4以上!
这样git会自动切换到develop分支。
3.同步本地远程分支:
git fetch origin
4.提交分支数据到远程服务器:
git push origin <local_branch_name>:<remote_branch_name>
例如:
git push origin develop:develop
当然如果当前在develop分支下,也可以直接
git push
5.删除远程分支develop:
git push origin :develop

第一次创建的时候服务器上面没有任何分支(使用git init --bare).那么在本地创建了之后需要推送一个分支到服务器上面。

即:第一次push必须这样写 git push origin master:master

git checkout master         //取出master版本的head。
git checkout tag_name    //在当前分支上 取出 tag_name 的版本
git checkout  master file_name  //放弃当前对文件file_name的修改

git checkout branch_name tag_name //取指定分支branch_name的tag_name的版本

git checkout  commit_id  file_name  //取文件file_name的 在commit_id是的版本。

commit_id为 git commit 时的sha值。

列出某一个commit ID(XXXXXXXXXXXXXXXX) 对应的补丁:

git log -1 -p XXXXXXXXXXXXXXXX
   git format-patch -1 XXXXXXXXXXXXXXXX <===-1不可省略
        --stdout         //打印到标准输出
   git show XXXXXXXXXXXXXXXX
   git diff-tree -p XXXXXXXXXXXXXXXX

时间: 2024-10-18 22:23:53

git学习——远程分支的相关文章

Git 学习笔记&lt;分支管理&gt; (三)

分支是什么? 分支就像树分出的树枝,不同的是,它们之间可以互相合并. 将版本的推进想象成一个链表的伸长:  version 1.0 ==> version 2.0 ==>version3.0  . master是主要的分支基本上用于发布产品.你可以从master分出一个dev,在上面创建新功能,或者修bug然后调试.最后再合并到master里面.就像下面这样. master分支:  version 1.0=========>version 2.0===... \            

Git学习 -- 远程仓库

第1步:创建SSH Key 在用户目录下的.ssh目录中,查看是否有id_rsa和id_rsa.pub两个文件,若没有则通过以下命令生成秘钥对: $ ssh-keygen -t rsa 第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面: 添加id_rsa.pub的内容 第3步,创建远程仓库 在GitHub网页上,按照提示创建即可 第4步,连接本地库和远程库 本地库 => 远程库 在本地仓库(若没有,先创建),运行命令: git remote add o

git 删除远程分支 branch

git 删除远程分支 : git push origin :远程分支 例如删除远程分支 osc(楼主的origin是 osc): [email protected] MINGW64 ~/workspace/HelloWorld/src/selenium (master)$ git push osc :oscTo [email protected]:wuzhiyi51/selenium_learn.git - [deleted] osc git 创建分支(branch) git branch te

git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支

git 查看远程分支.本地分支.创建分支.把分支推到远程repository.删除本地分支 [plain] view plain copy $ git branch -a * br-2.1.2.2 master remotes/origin/HEAD -> origin/master remotes/origin/br-2.1.2.1 remotes/origin/br-2.1.2.2 remotes/origin/br-2.1.3 remotes/origin/master 2 查看本地分支

四、git学习之——分支管理、解决冲突

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN! 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险. 现在有了分支,就不用怕了.你

git 查看远程分支、本地分支、删除本地分支

1 查看远程分支 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ git branch -a * br-2.1.2.2 master remotes/origin/HEAD -> origin/master remotes/origin/br-2.1.2.1 remotes/origin/br-2.1.2.2 remotes/origin/br-2.1.3 remotes/origin/master 2 查看本地分支 1 2 3 4 5 $ git branch *

git clone远程分支

有时git clone下来会出现很多branch,更麻烦的是如果主分支没代码那你就只能看到.git目录了.如下面的这个: $ git clonegit://gitorious.org/android-eeepc/mesa.git 发现本地就只有一个.git目录,那么这个时候就需要checkout了. 进入你的本地目录,如这个是mesa,利用 $ git branch –r 查看branch信息(当然你也可以用git show-branch查看,不过有时并不好用),获得如下branch信息: or

git 下载远程分支

下载项目代码 git clone xxxxx 下载后之后master分支,此时想下载该项目的别的分支,但是又不想通过在本机 git checkout -b xx 然后git pull xx分支 此时可以在本机项目命令行输入如下代码 git fetch 输入后就可以把远程的所有分支下载下来,不过在使用git branch在本地是看不到分支的,此时通过命令git checkout xx,就可以切换到xx的分支了

git克隆远程分支

$ git branch –r 查看远程branch信息 $ git checkout origin/android 检出远程分支 $ git branch -a 查看所有分支,包括本地和远程 可以使用checkout命令来把远程分支取到本地,并自动建立tracking $ git checkout -b python_mail.skin origin/python_mail.skin 或者使用-t参数,它默认会在本地建立一个和远程分支名字一样的分支 $ git checkout -t orig