连接远程仓库
-
注册github
-
创建SSH Key:
ssh-keygen -t rsa -C "youremail@example.com" -》生成
.ssh
目录,里面有id_rsa(私钥)
和id_rsa.pub(公钥)
-
将公钥添入 Github SSH Key (SSH Key可以有多个,方便多台电脑使用一个账户管理一个仓库)
-
在Github中创建Repository,最好与本地同名
-
把一个已有的本地仓库与之关联 :
git remote add origin git@github.com:UserName/RepositoryName.git
-
把本地库的所有内容推送到远程库:
git push -u origin master (由于远程库是空的,我们第一次推送
master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。)
从远程仓库克隆
git clone git@github.com:michaelliao/gitskills.git
GitHub给出的地址不止一个,还可以用
https://github.com/michaelliao/gitskills.git
这样的地址。实际上,Git支持多种协议,默认的git://
使用ssh,但也可以使用https
等其他协议。使用https
除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令
分支管理
- 基本操作(HEAD指向当前分支,master主分支)
- 创建新的分支并切换:git checkout -b dev
- 查看分支:git branch
- 切换分支:git checkout master
- 合并指定分支到当前分支:git merge dev (当没有冲突时默认使用FastForword模式,即删除分支后会丢掉分支信息,使用--no-ff禁用FF模式)
- 删除分支:git branch -d dev
- 解决分支合并冲突
- 手动解决,自动合并失败后,Git用
<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容,通过手动解决后,再add+commit实现合并 查看图结构:git log --graph --pretty=oneline --abbrev-commit
- 手动解决,自动合并失败后,Git用
- 分支使用策略
master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面工作- dev分支用于开发,
dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本 - 开发者每个人在dev上有自己的分支
- Bug分支(在开发过程中,你需要暂停当前分支的工作,而建立新的分支处理bug等问题)
- 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:git stash
- 查看工作现场列表:
git stash list
- 恢复现场:
git stash apply stash@{0}(不在list中删除),git stash pop(自动删除list中记录)
- Feature分支:新功能最好在新的分支中开始
- 丢弃没有合并的分支(强制删除):git branch -D feature
- 多人协作
- 查看远程仓库信息:git remote -v
- 推送本地分支到远程:
git push origin master (主分支,开发分支需要同步到远程,其他视具体情况而定)
- 从远程仓库clone,默认情况下,只能看到本地的
master
分支,创建远程origin
的dev
分支到本地:git checkout -b dev origin/dev,建立连接:
git branch --set-upstream dev origin/dev
- 解决推送失败问题:当多人修改了远程仓库的内容时推送会产生冲突
- 先用
git pull
把最新的提交从origin/dev
抓下来 - 手动解决本地合并冲突
git push origin dev
- 先用
标签管理
- 切换到要打标签的分支
- 打标签:git tag <tag_name> [commitId] -m "comment"
- 查看标签:git show <tag_name>
- 删除标签:
git tag -d <tag_name>
- 推送标签到远程:
git push origin <tag_name>/--tags
- 删除远程标签:git tag -d <tag_name>
git push origin :refs/tags/<tag_name>
自定义Git
- 忽略某些文件时,需要编写
.gitignore