Git操作远程库

原创 和尚 随笔 Git 882阅读 2015-01-15 23:46:53 举报

远程仓库

一、关联你的Github:

1、添加ssh-key: 在你的本地打开 Git Bash,输入如下命令创建一个ssh-key:
$ ssh-keygen -t rsa -C "your email"
然后一路回车,再你的用户主目录下会有一个.ssh文件夹,底下会有 id_rsa 和 id_rsa.pub 两个文件, 打开id_rsa.pub文件,复制里边的所有数据,接下来在你的GitHub上打开设置项,进入ssh keys这一项, 然后创建一个SSH key,把id_rsa.pub数据添加到相应位置,最后生成即可。 2、本地仓库与Github仓库关联: 在GitHub上创建一个代码仓库,例如:repository,创建完成后就需要和本地的相应仓库连接起来,则需要以下步骤: 连接Github仓库: 在你的本地仓库里打开 Git Bash,输入如下命令:
$ git remote add origin git@github.com:zhangxxxx/xxx.git
向Github仓库推送数据:
$ git push -u origin master
第一次推送需要使用 -u , git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支 和远程的master分支关联起来,以后使用就可以直接省略 -u 在下次连接Github仓库时,会出现一些意外情况:(会有很多意外,此处只是我碰到过的) 情况一:如果出现 fatal: remote origin already exists. 的失败提示信息,则可以输入如下命令:
$ git remote rm origin
然后在次连接,如果它还是一个打不死的小强,则在用户主目录下找到一个名为gitconfig的文件,打开它把里面 的[remote "origin"]那一行删掉就好了! 情况二:当执行 push 时提示: error: failed to push some refs to 'git@github.com:zhangxxxx/xxx.git ' 则首先把远程Github上的文件拉下来
$ git pull origin master
然后再执行 push 情况三: 如果连接时提示: error: failed to push some refs to 'git@github.com:zhangxxxx/xxx.git ' 那么检查你的的请求路径是否正确 3、克隆远程仓库: 使用git从远程克隆 GitHub 仓库: 假设在本地一个目录下克隆我Github上的repository库:
$ git clone git@github.com:zhangxxxx/xxx.git

分支管理

一、创建与合并分支:

在git中,有一条主分支,即master分支。在实际工作中,一般都是在自己创建的分支上工作,然后再合并到master上; 在master上有一个头指针 HEAD,它一开始是指向master的,当然,我们可以把他切换到我们创建的分支上去。HEAD指针 其指向的就是当前所处的分支。那么如何创建分支和合并分支呢? 1、创建分支: 一般工作中,没有特殊的需求,你创建了一个分支后肯定得切换到新创建的分支上去工作,亦即有两步要走。 方法一:创建并直接切换到当前创建的分支
$ git checkout -b newbranch
通过以上命令则创建了 newbranch 分支,并且直接切换到 newbranch 上。 方法二:先创建分支,再切换到分支 创建分支
$ git branch newbranch
切换分支
$ git checkout newbranch
2、查看分支 我们创建分支后,可以通过命令来查看所创建的分支和当前所处的分支
$ git branch
  • 所标记的分支为当前分支
比如我们目前只创建了一个分支 newbranch ,并且目前切换到了newbranch,则同查看结果如下:
  • newbranch
master 3、合并分支: 在分支上所做的修改(提交)只是发生在分支上,对master没有影响,要把分支上的提交合并到 master上(或其他分支上),可以通过以下步骤: 首先,对分支上的数据进行 add 和 commit 操作。 然后,切换到master上(或其他分支上),通过以下命令对分支进行合并:
$ git merge newbranch
以上命令中 merge 会实现“Fast-forward”合并,即快速合并。这个命令不会提供任何记录信息 所以最好通过 --no-ff (no fast-forword)来合并:
$ git merge --no-ff -m "说明信息" newbranch
这样就会对本次的合并产生记录,这是一个最有效的分支管理策略,便于管理 4、删除分支: 合并完分支之后可以对不再使用的分支进行删除清理操作:
$ git branch -d newbranch
强制删除:
$ git brnach -D newbranch

二、解决分支冲突问题:

在进行合并的时候,如果两次合并的数据产生不一致,或者你和你的团队成员所做的修改数据不一致, 则此时会产生冲突问题,必须解决冲突后才能顺利的完成合并操作。那么如何解决分支冲突呢? 产生冲突之后,可以通过
$ git status 和 $ git log --graph --pretty=oneline --abbrev-commit
查看,它会提示冲突信息 然后查看所产生冲突的文件,在文件上会有提示有哪些信息冲突,把相应的冲突修改合并之后保持并 添加到stage并提交,然后再进行合并。

三、Bug分支:

假设,你正在干活,突然接到一个bug报告,并且需要马上修复;但是手上的活还没干完,又不能提交,那怎么办? 解决这个问题: 首先,把当前"工作现场"存储起来,等以后恢复现场后再开始工作:
$ git stash
现在可以通过 git status 查看工作区是clean的 然后,创建一个用来修复bug的分支,对bug进行修复后同样进行提交合并等操作 最后,恢复之前的工作现场: 切换到之前的分支 bran
$ git checkout bran
但是此时还不能继续工作,工作区还是干净的。 可以通过
$ git stash list
来查看所有被存储起来的工作现场 然后恢复现场,恢复现场有两个方法: 方法一:
$ git stash apply
他并不能自动删除存储区保存的现场,必须通过
$ git stash drop
来清理 方法二:
$ git stash pop
他可以恢复后自动清理 当你多次 stash 之后,存储区会存储多个工作现场,那么可以通过 git stash list 来查看,然后 把相应的 stash@{i} 加到恢复命令后边,就可以恢复指定的现场,其中i是编号。例如:
$ git stash apply stash@{0}
就可以把第0个现场恢复。 PS:
值得说明的一点是,当添加新功能或其他Feature的时候,同样可以向bug分支那样进行工作,bug分支只是一种工作方式
灵活的运用。

四、多人协作:

1、查看远程库信息: 当你从远程库克隆仓库的时候,git会把本地master和远程master关联起来,并且,远程库的默认名称是 origin。 你可以通过:
$ git remote
查看远程库 也可以通过:
$ git remote -v
查看远程库详细信息 2、向远程库推送分支: 推送分支就是把本地分支提交的数据推送到远程库相应的分支上去,推送的时候要指定相应的分支。
$ git push origin newbranch
newbranch就是你所要推送到的对应的远程目标分支,也可以是master。 3、抓取分支: 假如你的小伙伴和你在合作开发,都需要推送到远程的某一个分支上,当你的小伙伴不断的推送他的分支, 此时你也需要推送你的分支,当你准备妥当,添加-->提交-->push,但是推送失败,git提示发生冲突, 因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/newbranch抓下来,然后,在本地合并,解决冲突,再推送。 抓取:
$ git pull
这时pull也失败了,这是为什么呢?因为你本地的分支和远程的分支没有关联起来,则用以下命令关联起来
$ git branch --set-upstream newbranch origin/newbranch
然后再次 pull,pull成功了,但是合并有冲突,那么解决方法和 “解决分支冲突问题” 一节是一样的, 解决了冲突后再对其进行合并提交,再推送。 因此,多人协作的工作模式通常是这样: 首先,可以试图用git push origin branch-name推送自己的修改; 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; 如果合并有冲突,则解决冲突,并在本地提交; 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建, 用命令 git branch --set-upstream branch-name origin/branch-name。 这就是多人协作的工作模式,一旦熟悉了,就非常简单

标签管理

在实际开发中,需要对不同的版本进行打钉标签

一、创建标签:

1、创建标签: 首先需要切换到需要打标签的分支上,每一个标签对应的是不同的commit,在通过下列命令对其创建标签:
$ git tag v1.0
则对该分支打上了v1.0的标签 2、查看标签L: 可以通过以下命令查看所有标签,标签不是按时间顺序排列的,而是按字母排列的:
$ git tag
3、对历史记录重打标签: 同样,可以对之前的commit打上标签,那么怎么打呢? 通过历史查找找到需要打上标签的commit ID
$ git log --pretty=oneline --abbrev-commit
然后通过以下命令来实现:
$ git tag v0.8 commit-ID
commit-ID需要修改成相对应的commit ID。 4、查看具体标签详细信息: 可以通过以下命令来查看相应的标签信息:
$ git show <tagname>
5、还可以对标签指定相应的说明: -a 指定标签名, -m 指定说明
$ git tag -a <tagname> -m "description"
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;

二、操作标签:

1、删除标签: 对于打错的标签可以对其进行删除:
$ git tag -d <tagname>
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。 2、推送标签: 推送指定标签:
$ git push origin <tagname>
或者一次性推送本地标签:
$ git push origin --tags
3、删除远程标签: 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d <tagname>
然后,从远程删除。删除命令也是push,但是格式如下:

$ git push origin :refs/tags/<tagname>

评论 ( 0 )
最新评论
暂无评论
赶紧努力消灭 0 回复