coding 合并分支上有个dev分支如何拉取到本地

问题背景是这样的:为了同时使用和两个网站的pages服务,我本地git仓库关联了两个remote仓库,分别是和远程库的,两个远程库的pages服务分支名分别是coding-pages和gh-pages。我本地已经添加了这两个远程库,假设我现在本地开发分支名字为pagesServe,现在代码commit提交好后,怎么分别向coding的coding-pages分支和github的gh-pages分支推送现在的代码呢?抛开问题背景本身的描述为:我本地开发分支,名字为A,每次开发完,要分别把代码推送到远程库remote01的B分支和远程库remote02的C分支。这样的设想可行吗?操作流程是什么?我是git小白,所以您讲的越详细越好。谢谢大家。
格式为:git push [远程库名] [本地分支名] : [远程分支名]具体操作为:git push remote01 A:Bgit push remote02 A:C
泻药。&br&1. 如果你本地分支跟远程的分支名一样,那很简单,直接:&br&git push coding branch1&br&git push github branch1&br&而且也建议这种方式。&br&&br&2. 如果你本地分支跟远程分支不一样,那如下:&br&git push coding localbranch:branch1&br&git push github localbranch:branch1&br&非常不建议这样使用,本地分支跟远程分支一一对应起来是最好的管理方式。&br&&br&3. 如果你每次本地分支更新之后都需要同步到两个远程仓库,每次都手动push各个仓库未免有些麻烦,于是就有了下面这种方式:&br&&br&git remote add all &a href=&///?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&git remote set-url origin --push --add &a href=&///?target=http%3A//coding.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&coding.net&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&git remote set-url origin --push --add &a href=&///?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&上述代码什么意思呢?就是你设置了一个all的远程仓库,这个all关联了coding和github的远程地址,以后只需要执行:&br&git push all branch&br&就直接向以上两个远程仓库同时push代码了。
泻药。1. 如果你本地分支跟远程的分支名一样,那很简单,直接:git push coding branch1git push github branch1而且也建议这种方式。2. 如果你本地分支跟远程分支不一样,那如下:git push coding localbranch:branch1git push github localbranch:branch1…
这种无聊的操作如果每次都手动推,效率太低了。&br&上持续集成工具吧,轮子都是现成的。&br&&br&可以参考我这个Github项目&br&&a href=&///?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - &i class=&icon-external&&&/i&&/a&&br&这是一个基于Hugo搭建的Blog,利用了&a href=&///?target=http%3A//& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&提供的服务。每次写完文章以后,只要把源码推到Github的master分支里,它就会自动帮你编译,生成静态页面,部署到Github的gh-pages和Coding的coding-pages上。&br&&br&具体的部署可以参考下面的链接&br&&br&Hugo利用Wercker自动部署:&br&&a href=&///?target=https%3A//gohugo.io/tutorials/automated-deployments%23automated-deployments-with-wercker& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hugo - Automated deployments with Wercker&i class=&icon-external&&&/i&&/a&&br&&br&部署到coding-pages的wercker step:&br&&a href=&///?target=https%3A///lowwor/step-coding-pages& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - lowwor/step-coding-pages: Wercker steps to auto deploy to coding.net coding-pages&i class=&icon-external&&&/i&&/a&
这种无聊的操作如果每次都手动推,效率太低了。上持续集成工具吧,轮子都是现成的。可以参考我这个Github项目这是一个基于Hugo搭建的Blog,利用了提供的服务。每次写完文章以后,只要把源码推到Github的mast…
已有帐号?
无法登录?
社交帐号登录有时候需要从远程git获取某个远程分支的代码,命令是&git fetch origin &remote-branch:local-branch ,这个命令比较容易忘记,特别记录下。1. 查看远程仓库git remote -v
origin http://git./elifeapp/weidian.git (fetch)
origin http://git./elifeapp/weidian.git (push)2.从远程获取最新版本到本地git fetch origin master:temp&这句命令的意思是:从远程的origin仓库的master分支下载到本地并新建一个分支temp使用git pull也可以拉取远程分支的代码,相当于git fetch + merge,&使用git fetch更好理解,更,对于pull也可以更新代码到本地,相当于fetch+merge,多人写作的话不够安全。
版权声明:本文为博主原创,转载请保留出处http://blog.csdn.net/offbye说明,此博文是学习《Git教程——廖雪峰》的笔记
一、安装和设置
sudo apt-get install git -y
$ git config --global user.name "Your Name"
$ git config --global user.email ""
二、创建版本库
创建版本库
mkdir learngit
cd learngit
该Git库是空仓库。不要私自修改.git目录,Git用它来跟踪管理版本库。
不是必须在空目录下创建Git仓库。
所有的版本控制系统,其实只能跟踪文本文件的改动,Git也是如此。对于图片和视频等二进制文件,可以使用Git管理,但没法跟踪文件的变化。
添加和提交文件
创建readme.txt,添加如下内容。
Git is a version control system.
Git is free software.
使用下面的命令添加和提交文件:
git add readme.txt
git commit –m “wrote a readme file”
-m “….”是注释,便于查找改动。推荐使用。
git commit 相当于保存一个快照,可以用于恢复。
为什么Git添加文件需要add、commit两步?因为commit可以一次提交很多文件。
git add file1.txt
git add file2.txt file3.txt
git commit –m “add 3 file.”
查看仓库状态和文件变化
要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,使用git diff查看修改内容。
修改readme.txt,如下所示。
Git is a distributed version control system.
Git is free software.
输入以下命令练习。
git status
git diff readme.txt
git status
git commit -m “add distributed”
git status
三、时光穿梭机
git log 显示提交日志(从最近到最远)
git log –pretty=online 精简显示
git reset 版本回退
类似0347cda67cf047da1ad612abbf8cff8是commit id(版本号)。之所以不用1,2…,是为了防止多人在同一个仓库工作时出现冲突。
Git把每次提交串成一条时间线。
在Git中,用HEAD表示当前版本,也就是最新的提交。上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本就是HEAD~100。
只要记得版本号,回退之后还可以恢复。(命令行窗口未关或提前保存了git log)
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向当前版本,改为指向上一个版本。
让HEAD指向哪个版本号,你就把当前版本定位在哪。
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
修改readme.txt,如下所示。
Git is a distributed version control system.
Git is free software distributed under the GPL.
输入以下命令练习。
git add readme.txt
git commit –m “append GPL”
git log & ../log.txt
git log –pretty=oneline
git reset –hard HEAD^
git reset –hard 73bdb9efc
git reflog
工作区和暂存区
Git区别于其它版本控制器之处在于:Git有暂存区。
工作区:在电脑里能看到的目录。
版本库:工作区中的隐藏目录.git。
版本库中有:暂存区(stage或index),master分支,以及指向master的指针HEAD。
提交文件到Git仓库分为2步:git add是把文件修改添加到暂存区;git commit是把暂存区的所有内容提交到当前分支。
master分支是创建Git版本库时,Git自动创建的。
简单理解:需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改到当前分支。
修改readme.txt,如下所示。
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
在工作区新增文件LICENSE,内容随便。
执行以下命令,检查状态和添加文件。
git status
git add readme.txt
git add LICENSE
git status
暂存区的状态如下图所示。
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
git commit -m “understand how stage works”
git stauts
* 暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。
Git比其它版本控制系统优秀的地方在于:GTI跟踪并管理修改,而非文件。
下面的例子说明了这个过程。
git add readme.txt
git status
git commit -m “git tracks changes”
git status
git diff HEAD -- readme.txt
Git跟踪修改原理:每次修改,如果不add到暂存区,那就不会加入到commit中。
git checkout – filename
git checkout – readme.txt 就是把readme.txt文件在工作区的修改全部撤销。分两种情况:第一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;第二种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。总之,就是让这个文件回到最近一次git commit或git add时的状态。
如果想删除已经git add,但是没有git commit的内容。就使用git reset HEAD readme.txt命令。git reset HEAD filename 可以把暂存的修改撤销掉,重新放回工作区。
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。
如果已经git commit,但是没有把自己的本地库推送到远程。可以通过git reset实现版本回退。
如果已经推送到远程,就没有办法删除了。
真的删除文件
rm test.txt
git rm test.txt
git commit -m “remove test.txt”
误删文件,恢复到最新版
rm test.txt
git checkout -- tes.txt
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
三、远程仓库
Git杀手级功能:远程仓库。Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。
最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。
实际情况:找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
Github,提供了Git仓库托管服务。国内有类似的coding。
本地Git仓库和GitHub仓库之间的传输是通过SSH加密的。
第1步:创建SSH Key。
ssh-keygen -t rsa
ssh-keygen -t rsa -C “”
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面;然后,点“Bew SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的。
Github上的免费托管的Git仓库是公开的,别人可以看到。国内的coding.net可以免费托管私有仓库。
添加远程仓库
在Github上创建一个远程库,可以克隆这个库,或者和本地的仓库进行合并。
在Github上创建远程库learngit;
上传自己的SSH公匙;
关联本地仓库和远程仓库。
git remote add origin :xuezhisd/learngit.git
git push -u origin master
git push orgin master
本地库的内容推送到远程,用git push命令。
从远程库克隆
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
git clone :xuezhisd/learngit.git
git clone /xuezhisd/learngit.git
cd learngit
分支==平行宇宙
通过创建自己的分支,既可以随时提交,又能避免丢失每天进度的风险。直到开发完成后,在一次性合并到原来的分支上。既安全,有不影响别人工作。
Git分支优点:无论创建、切换和删除分支,1秒完成。
创建于合并分支
每次提交串起来,就是一个分支。Git中的master分支是主分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:
创建dev分支,并把HEAD指向dev:
dev上的工作完成了,就可以把dev合并到master上:
合并完分支后,可以删除dev分支。删除dev分支就是把dev指针给删掉:
git checkout -b dev
git branch
git add readme.txt
git commit -m “branch test”
git checkout master
git merge dev
git branch -d dev
git branch
git merge命令用于合并指定分支到当前分支。
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log –graph命令可以看到分支合并图。
git checkout -b feature1
git add readme.txt
git commit -m “AND simple”
git checkout master
gti add readme.txt
git commit -m “& simple”
git merge feature1
git status
git add readme.txt
git commit -m “conflict fixed”
git log --graph --pretty-oneline --abbrev-commit
git branch -d feature1
分支管理策略
分支管理的几个基本原则:
master分支应该是稳定的,仅用于发布新版本,不用来干活;
平时大家都在dev分支上干活。发布新版本时,再合并到master分支上。
强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git checkout -b dev
git add readme.txt
git commit -m “add merge”
git merge --no-ff -m “merge with no-ff” dev
git log --graph --pretty=oneline --abbrev-commit
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
鉴于Git的分支如此强大,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
先将正在工作现场“储藏”起来,等修复完Bug之后,再恢复现场,继续工作。
git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作。
git checkout master
git checkout -b issue-101
git add readme.txt
git commit -m “fix bug 101”
git checkout master
git merge --no-ff -m “merged bug fix 101” issue-101
git branch -d issue-101
git checkout dev
git status
git stash list
git stash pop
git stash list
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
Feature分支
每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
git checkout -b feature-vulcan
git add vulcan.py
git status
git commit -m “add feature vulcan”
git checkout dev
git branch -D feature-vulcan
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
从远程仓库克隆时,Git自动把本地的master分支和远程的master分支对应起来,并且,远程仓库的默认名称是origin。
git remote
git remote -v
git push origin master
git push origin dev
git clone :xuezhisd/learngit.git
git branch
git checkout -b dev origin/dev
git branch --set-upstream dev origin/dev
四、标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像,但是分支可以移动,标签不能移动)。
tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。
tag如下图所示:
首先,切到需要打标签的分支上:
git branch
git checkout master
然后,使用命令git tag name打标签:
git tag v1.0
查看所有的标签:
默认标签是打在最新提交的commit上。如果想给历史commit打标签,需要先找到它的commit id,然后打标签:
git log --pretty=oneline -abbrev-commit
git tag v0.9 62249
git show v0.9
创建带注释的标签:
git tag -a v0.1 -m "version 0.1 released" 3628164
git show v0.1
使用PGP私匙签名打标签:
fec145a是commit id
git tag -s -m "signed version 0.2 released" fec145a
git show v0.2
标签打错了,删除标签:
git tag -d v0.1
创建的标签只存储在本地,不会自动推送到远程。
将某个标签推送到远程:
git push origin v1.0
git push origin --tags
删除远程标签
git tag -d v0.9
git push origin :refs/tags/v0.9
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
文章:10篇
阅读:6325
访问:68434次
积分:1757
积分:1757
排名:第16280名
原创:74篇
评论:19条

我要回帖

更多关于 本地项目上传到coding 的文章

 

随机推荐