3.git使用(二)

远程仓库:
访问GitHub速度慢的解决办法
1. 修改本地hosts文件

windows系统的hosts文件的位置如下:C:\Windows\System32\drivers\etc\hosts
mac/linux系统的hosts文件的位置如下:/etc/hosts
2. 增加http://github.global.ssl.fastly.net和http://github.com的映射

获取Github相关网站的ip
访问https://www.ipaddress.com,拉下来,找到页面中下方的“IP Address Tools – Quick Links”
分别输入github.global.ssl.fastly.net和github.com,查询ip地址
下面是我的配置
140.82.114.4	github.com
199.232.5.194	github.global.ssl.fastly.net
3.命令提示符中输入ping github.com

保存更新DNS
Winodws系统的做法:打开CMD,输入ipconfig /flushdns

1.请自行注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的

  • 第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
  • 一路回车,使用默认值即可
  • 在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
  • 登陆GitHub,打开“Account settings”,“SSH Keys”页面:
  • 点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
    在这里插入图片描述

2.添加远程库

  • 首先,登陆GitHub,创建一个新的仓库learngit:
  • 在本地的learngit仓库下运行命令:
$ git remote add origin git@github.com:michaelliao/learngit.git  //origin表示远程仓库

$ git push -u origin master	
//由于远程库是空的,第一次推送时,加上了-u参数,
//不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,
//在以后的推送或者拉取时就可以简化命令。

从现在起,只要本地作了提交,就可以通过命令把本地master分支的最新修改推送至GitHu:

$ git push origin master

3.克隆远程仓库

$ git clone git@github.com:michaelliao/gitskills.git
分支管理

1.创建和合并分支

  • 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:
    在这里插入图片描述

  • 当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
    在这里插入图片描述

  • 假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
    在这里插入图片描述

1.1创建dev分支,然后切换到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'
  • 查看当前分支:
$ git branch
* dev	//当前分支前面会标一个*号。
  master
  • 对readme.txt做个修改
  • 提交
$ git add readme.txt 
$ git commit -m "branch test"
[dev b17d20e] branch test
 1 file changed, 1 insertion(+)
  • 切换回master分支
$ git checkout master
Switched to branch 'master'
  • 把dev分支的工作成果合并到master分支上
$ git merge dev
Updating d46f35e..b17d20e
Fast-forward	//这次合并是“快进模式”
 readme.txt | 1 +
 1 file changed, 1 insertion(+)
  • 合并完成后,就可以放心地删除dev分支了:
$ git branch -d dev
Deleted branch dev (was b17d20e).
  • 删除后,查看branch,就只剩下master分支了
$ git branch
* master

2.解决分支间的冲突

  • 准备新的feature1分支
$ git checkout -b feature1
Switched to a new branch 'feature1'
  • 修改readme.txt
  • 在feature1分支上提交
  • 切换到master分支:
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.	//显示当前master分支比远程的master分支要超前1个提交
  (use "git push" to publish your local commits)
  • 再修改readme.txt
  • 提交
  • 然后合并,看提示会有什么,然后打开冲突的文件看看有什么
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt	//合并冲突在readme文件
Automatic merge failed; fix conflicts and then commit the result.
  • 在readme.txt文件的冲突
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

在这里插入图片描述

  • 必须手动解决冲突后再提交,就是自己再一次修改readme.txt,目的是将master指向的节点向前走一步,提交就解决了
    在这里插入图片描述

  • 删除分支

3.分支管理策略

  • 在实际开发中:
    master分支应该仅用来发布新版本,平时不能在上面干活;
    干活都在dev分支,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了
    在这里插入图片描述
  • 合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
$ git merge --no-ff -m "merge with no-ff" dev

3.bug分支

  • 当工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
  • Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge
  • 用git status查看工作区,就是干净的,因此可以放心地创建分支来修复bug
  • 首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
  (use "git push" to publish your local commits)

$ git checkout -b issue-101
Switched to a new branch 'issue-101'
  • 修复bug
  • 修复完成后,切换到master分支,并完成合并,最后删除分支
  • 现在,是时候接着回到dev分支干活了

4.feature功能分支

  • 每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

5.多人协作

  • 查看远程库的信息
$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)
  • 推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支
$ git push origin master
  • 如果要推送其他分支,比如dev,就改成:
$ git push origin dev

5.1 多人协作时,大家都会往master和dev分支上推送各自的修改。

  • 假设你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
$ git checkout -b dev origin/dev
  • 然后,时不时地把dev分支push到远程
$ git add env.txt

$ git commit -m "add env"
[dev 7a5e5dd] add env
 1 file changed, 1 insertion(+)
 create mode 100644 env.txt

$ git push origin dev
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 308 bytes | 308.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
   f52c633..7a5e5dd  dev -> dev
  • 而碰巧你也对同样的文件作了修改,并试图推送,发送了错误
$ cat env.txt
env

$ git add env.txt

$ git commit -m "add new env"
[dev 7bd91f1] add new env
 1 file changed, 1 insertion(+)
 create mode 100644 env.txt

$ git push origin dev
To github.com:michaelliao/learngit.git
 ! [rejected]        dev -> dev (non-fast-forward)
error: failed to push some refs to 	'git@github.com:michaelliao/learngit.git'
//更新被拒绝,因为您当前分支的提示位于后面
hint: Updates were rejected because the tip of your current branch is behind	
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.	//先 git pull 然后再推
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

-先 git pull

$ git pull
There is no tracking information for the current branch.//提示没有追踪信息
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:
	//设置追踪信息
    git branch --set-upstream-to=origin/<branch> dev
  • 设置追踪信息
$ git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
  • 再git pull:
$ git pull
Auto-merging env.txt
CONFLICT (add/add): Merge conflict in env.txt		//文件冲突,此时需要手动在本地文件修改
Automatic merge failed; fix conflicts and then commit the result.

-提交后push到远程

6.标签管理

  • 给版本打标签,将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来,它就是指向某个commit的指针。所以,标签也是版本库的一个快照。
  • 打一个新标签
$ git tag v1.0
  • 查看所有标签
$ git tag
v1.0
  • 比方说要对add merge这次提交打标签,它对应的commit id是f52c633,敲入命令:
$ git tag v0.9 f52c633
  • 删除标签
$ git tag -d v0.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值