美文网首页
Git学习笔记(2)

Git学习笔记(2)

作者: 豆芽太羊 | 来源:发表于2017-12-28 16:02 被阅读0次

三、远程仓库

1.添加远程库

Step1:登陆GitHub,创建一个new repository(新仓库),填写仓库名称learngit,其他保持默认设置;
Step2:GitHub提示,可以从该仓库clone出新仓库,也可以关联已有的本地仓库,将本地内容push到GitHub仓库。现在,选择后者,根据网页提示在终端输入

$ git remote add origin https://github.com/ZhouXiaorui1993/learngit.git

来添加远程库。这里使用的是https协议,也可以用ssh协议,将上述地址改为:

$ git remote add origin git@github.com:ZhouXiaorui1993/learngit.git

ZhouXiaorui1993为GitHub账户名origin为远程库的名字,是Git的默认叫法,但一般无需修改,learngitrepository的名字。
使用ssh协议可能会得到一个警告,此时需要将github公钥添加到信任列表,若仍出现问题则需要手动配置ssh秘钥,方法如下。(相比之下,ssh速度更快,且无需每次push都输入账户名和密码,推荐使用)

ssh秘钥配置

1)设置本地git的username和email(前面已经设置过)

$ git config --global user.name “ZhouXR”
$ git config --global user.email “8437×××××@qq.com”

2)生成秘钥

$ ssh-keygen -t rsa -C “8437×××××@qq.com”

连续三个回车,得到两个文件:id_rsaid_rsa.pub

3)添加秘钥到ssh-agent

$ eval “$(ssh-agent -s)”

得到agent pid为xxxx,再输入以下指令

$ ssh -add ~/.ssh/id_rsa

4)在Github中添加ssh key

登陆Github,选择settingsSSH and GPG keysadd ssh key,将~/.ssh/id_rsa.pub中的内容复制到框中,再点击add即可。

Step3:将本地所有内容推送至远程库。终端输入git push -u origin master,这里的git push命令实际上是将当前分支master推送到远程。注:由于此时远程库是空的,第一次推送时加上了-u参数,Git不但会将本地分支内容推送至远程,还会将本地master和远程master关联起来,在以后的推送或拉取中就可以简化命令。
此后,只要本地做了commit,就可以通过命令git push <仓库名> <分支名>来将本地分支的最新修改推送至GitHub。
注意:并不是一定要将本地所有分支都推送至远程,在项目开发过程中,其中master为主分支,故要时刻与远程同步;对于团队成员都需要在上面工作的开发分支,也需要与远程同步;而诸如bug修复一类的分支,只在本地使用,就无需推送到远程了。

2.从远程库克隆(clone)

假设没有本地库,先创建一个远程库,然后从远程库克隆。
Step1:登陆GitHub,创建一个新仓库,命名为gitskills,勾选initialize this repository with a README,这样GitHub会自动创建一个README.md文件。

Step2:现在远程库已经准备完成,用命令

$ git clone [-o <name>] https://github.com/ZhouXiaorui1993/gitskills.git

克隆一个本地库,这里选项-o可以将克隆下来的库在本地重命名为指定name,若不加则默认为origin。此时cdgitskills文件夹,就可以在本地看到README.md文件了。
若有多人协作开发,则每人从远程克隆一份就可以了。

3.远程库的信息

1)命令git remote [-v]:不带参数时,列出所有远程库名,带有参数-v时,可以查看远程主机的网址。
2)命令git remote show <远程库名>:可以查看该远程库的详细信息。
3)命令git remote add <远程库名> <网址>:添加远程库。
命令 git remote rm <远程库名>:删除远程库。

3.利用远程库多人协作工作

Step1:从远程库clone文件到本地,默认情况下只能看到本地的master分支。如果要在其中的dev分支上进行开发,则用命令git checkout -b dev origin/dev 来创建本地的dev分支;
Step2:修改完成后,试图使用命令git push origin <branch name>来推送自己的修改至远程;
Step3:如果推送失败,则是由于远程分支比自己的本地更新,需要先用命令
git pull origin <远程分支名>:<本地分支名>取回远程该分支的更新,并与本地的指定分支合并。
若是远程分支与当前分支合并,则可省略冒号后的部分。
Step4:如果合并有冲突,则手动解决冲突,并在本地提交;
Step5:若没有冲突或冲突解决以后,再用git push origin <branch name>推送自己的修改至远程。

:若git pull命令提示“no tracking information”,则说明本地分支和远程分支之间的链接关系未创建,此时可用命令git branch –set-upstream <本地分支名> origin/<远程分支名>来建立二者的关联。

补充
1)命令git fetch <远程库名> [分支名]:将远程的某个分支的更新取回本地,若不加分支名,则将远程所有分支的更新取回本地。所取回的更新,在本地要用远程库名/分支名的形式读取。
2)取回远程更新后,可在其基础上,使用git checkout -b <newbranch> <远程库名>/<分支名>创建一个新的分支。此外,也可使用git merge <远程库名>/<分支名>在本地分支上合并远程分支。
可以看出,git pull命令相当于git fetchgit merge两个命令的结合使用。


四、分支管理

1.创建与合并分支

Step1:创建新的分支(branch),命名为dev,然后切换到dev分支,命令如下

$ git branch dev
$ git checkout dev

也可以用命令git checkout -b dev来代替上述两条命令,其中参数-b表示创建并切换。

master为主分支,HEAD指向当前分支,master指向提交,新建的分支指向master相同的提交。
Step2:可以用命令git branch来查看所有分支,当前分支前会有*标志。
补充:git branch命令可带选项,其中-r选项可用来查看远程分支;-a选项查看所有分支。

Step3:在当前分支上正常add和提交文件。
命令 git checkout master 可切换回maser分支,此时在master分支上无法看到dev分支上提交到的修改内容。
Step4:将dev分支的工作成果合并到master分支上,先切换到master分支,再使用命令git merge dev。注:git merge命令是用于将指定分支合并到当前分支。
Step5:合并完成后,如果不在需要dev分支,则可用命令git branch -d dev来删除dev分支。
注1:若某分支未进行合并但想要将其舍弃,可以采用命令git branch -D dev来强行删除。
命令git push origin :dev可用来删除远程库中的dev分支。

注2:命令git reflog –date=local | grep <branchname>:查看对某一分支的操作记录,从而找出该分支的创建来源。

2.解决冲突

若同一文件在不同分支都进行了修改并提交,则合并时可能会出现冲突(git会有提示),此时需要手动修改文件以消除冲突,提交后再进行合并即可(可cat查看文件内容以发现冲突所在位置)。
命令git log –graph可以看到分支合并图。

3.分支管理策略

一般情况下,git默认合并分支为Fast Forward模式,此模式下,若删除原分支,则会丢失其信息。若想保留该历史信息,则可强制禁止该模式,这样合并时Git会生成一个新的commit
命令git merge --no-ff -m “新的commit描述” branch_name可以禁止Fast Forward模式

4.bug分支

当出现bug的时候,我们会通过创建新的bug分支去进行修复,修复完成后提交合并,最后删除bug分支。若此时手头工作未完成,可通过git stash命令来将工作现场“储藏”,然后去修复bug,修复后再利用git stash pop,回到工作现场。命令git stash list可用来查看储藏列表。

git stash命令的实验
1)现有主分支master,从主分支分出的子分支dev。现在在子分支dev上修改了文件test,由于还没完成,所以不能进行提交。
2)假定此时master分支上的problem文件出现bug,则切换到master分支进行修复。切换过来以后,安全考虑,先用cat指令查看了一下test文件,发现刚才在子分支上的修改被带过来了。
3)为避免接下来修复后提交时将该修改也一起提交,故切换回dev。利用git stash指令将这里的工作隐藏。
4)再切换回master分支,再次用cat指令查看test文件,发现该文件不见了。证明隐藏生效,可以修复bug了。首先从master创建临时分支——issue-001,切换到这个分支上打开problem文件,对其进行修改后提交,再切换回master分支,将临时分支合并到主分支,bug解决,删除issue-001分支。
5)为继续进行dev中未完成的工作,切换回dev分支,执行命令git stash pop,找回原文件。

相关文章

  • 学习笔记| git深入浅出 Part1_快速操作指南

    Git专题 学习笔记| git深入浅出 Part1_快速操作指南 学习笔记| git深入浅出 Part2_Git...

  • git 命令(摘抄)

    一、Git学习笔记01--初始化设置 1、查看git版本 $ git --version 2、设置用户姓名和邮箱 ...

  • git 入门

    git 入门学习笔记----3个入门命令:git init、git add、git commit -v 学习场景(...

  • git学习笔记2

    查看文件内容 cat file 查看历史版本 回退历史版本 git reset --hard HEAD^ # 回退...

  • Git学习笔记2

    怎么安装Git 由于Git是开源的,大家只要去官网下就好了。 根据操作系统选择页面进入后会看到 为什么不装Port...

  • Git学习笔记(2)

    三、远程仓库 1.添加远程库 Step1:登陆GitHub,创建一个new repository(新仓库),填写仓...

  • Git学习笔记2

    从零开始学习Git,入门网址廖雪峰Git教程。 分支管理 标签管理

  • git记录

    Git Magic图解gitgit 学习笔记git游戏(学习)1、消除文档路径中文乱码git config --g...

  • Git极简学习笔记

    git的学习笔记 1. 安装git 2. 简单开始 创建版本库,即在需要编写的代码的工作区建立,可以在git ba...

  • Git学习笔记--常用命令整理

    超实用Git学习笔记 Git全局配置git config --global user.name "用户名"git ...

网友评论

      本文标题:Git学习笔记(2)

      本文链接:https://www.haomeiwen.com/subject/tkdvgxtx.html