Git学习第二天

Git学习第二天

github

第一步创建SSH Key

用户主目录下,感觉就是之前lerarngit的上一级目录下,有没有.ssh目录,有的话看目录下有没有id_rsa和id_rsa.pub两个文件,没有的话打开Git Bash创建SSH Key:

$ ssh-keygen -t -C "myemail@email.com"

把邮箱换成自己邮箱,全部回车。找到.ssh文件夹,id_rsa和id_rsa.pub是SSH Key密钥对,前者是私钥,不能泄露,后者是公钥,可以透露

第二步登录GitHub

登录GitHub,打开账户设置,SSH Key页面,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点击添加。


运行第一步生成了key,但如果不上账号添加(第二步)的话时不能推送的


GitHub上免费托管的仓库任何人都可以看到,但只有自己才能改

不想让别人看两种方法
1. 交保护费
2. 自己搭Git服务器

添加远程库

  1. 登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库:
  2. 在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:
  3. $ git remote add origin git@github.com:myname/learngit.git

  4. 把本地库推送到远程库上

    $ git push -u origin master
    把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

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

$ git push origin master

把本地master分支最新修改推送到GitHub

本地库空的话会出异常

小结

要关联一个远程库,使用命令

git remote add origin git@server-name:path/repo-name.git

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

从远程库克隆

1.创建一个仓库名叫gitskills勾选Initialize this repository with a README这样GitHub会自动创建一个README.md文件

大约克隆空库也出异常

2.

$ git clone git@github.com:myname/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ cd gitskills
$ ls
README.md

git clone git@github.com:michaelliao/gitskills.git
git remote add origin git@github.com:myname/learngit.git

分支管理

每次提交,Git把它们串成一条时间线,这条时间线是一个分支,到现在为止,在Git里只有一个分支即master分支,HEAD指向master,master指向提交

创建分支
$ git checkout -b dev
Switched to a new branch 'dev'
等同于:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'

checkout -b build ?

查看分支
$ git branch
* dev
  master

当前分支前面会标一个*号,修改文件然后提交

$ git add filename
$ git commit -m "branch file"
[dev fec145a] branch test
 1 file changed, 1 insertion(+)

切换回master分支

$ git checkout master
Switched to branch 'master'

合并制定分值到当前分支(当前分支master)

$ git merge dev
Updating d17efd8..fec145a
Fast-forward
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

Fast-forward,Git告诉我饿们这次合并是 “快进模式”
就是直接把master指向dev的当前提交,所以合并速度很快

合并后可以删除dev分支

$ git branch -d dev
Deleted branch dev (was fec145a)

branch -d delete

$ git branch
* master
小结

Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>

解决冲突

$ git checkout -b feature1  #建立新分支
修改文件
$ git add filename   #添加
$ git commit -m "something"  #提交
$ git checkout master  #切换分支
修改文件
$ git add filename   #添加
$ git commit -m "something"  #提交
$ git merge feature1  #合并分支,提醒有冲突
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
修改文件,再次添加并提交
$ git log --graph=oneline --abbrev-commit  #查看分支合并情况
$ git branch -d feature1 #删除分支

分支管理策略

合并分支时,如果可以,Git会用Fast forward模式,但这种模式删除分支后会丢掉分支信息,如果强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样就可以从分支历史上看出分支信息。
$ git merge --no-ff -m "some message" dev普通模式合并,能看出痕迹

创建并切换dev分支:
$ git checkout -b dev
修改readme.txt文件,并提交一个commit:
$ git add readme.txt
$ git commit -m "add"
切换回master:
$ git checkout master
$ git merge --no-f -m "merge" dev #禁用ff,因为本次合并要创建一个新的commit,所及加上-m参数,填写描述
$ git log --graph --pretty=oneline --abbrev-commit
*   7825a50 merge with no-ff
|\
| * 6224937 add merge
|/
*   59bc1cb conflict fixed

可以看出合并痕迹

bug分支

当前dev分支上工作没做完,出现一个master分支上的bug需要处理。

  1. git stash保存工作现场
  2. git checkout master切换到master分支
  3. git checkout -b bug001master分支创建临时分支
  4. 修改,addcommit
  5. git checkout master切换到master分支
  6. git merge --no-ff -m "merge" bug001合并到master分支
  7. git branch -d bug001删除bug001分支
  8. git checkout dev回到dev分支干活
  9. git stash list查看保存列表
  10. 两种办法恢复
    1. git stash apply恢复,但恢复后stash内容并不删除,需要用git stash drop删除$ git stash apply stash@{0},drop也是这种格式么
    2. git stash pop删除,恢复的同时把stash内容也删了

feature分支

简单来说就是
创建一个新的分支feature,在这个分支上写完新功能后,不采用,未合并之前,用git branch -d feature不能删除,需要用git branch -D feature强制删除

多人协作

远程仓库的默认名称是origin

$ git remote
origin
$ git remote -v  #更详细的信息
origin  git@github.com:myname/learngit.git (fetch)
origin  git@github.com:myname/learngit.git (push)
推送分支
$ git push origin dev

- master分支是主分支,时刻与远程同步
- dev分支是开发分支,团队成员需要在上边工作,也需要远程同步
- bug分支本地修复,没必要
- feature看是否与小伙伴合作开发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值