Git使用
作为半个程序员,怎么能不会使用Git?
一、什么是Git?
是由Linux的开发者Linus为了管理世界各地提交到Linux的代码而开发的版本控制系统,使用的是C语言进行开发。
二、Git本地仓库管理
在进行Git管理之前,首先要对Git的身份进行配置,即告诉别人修改这个文件的人是谁。
1 | $ git config --global user.name "Your Name" |
Git本地文件的管理主要是三步:
git init
将当前文件夹加入git仓库中进行管理git add file
将file文件添加到staged暂存区中,可以一次添加一个,也可以使用git add --all
将所有已修改的文件添加git commit
将暂存区的文件提交到repository中,即将本次修改提交,此时需要带-m
参数后跟修改信息
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件。
Git版本控制中的文件分为以下五种状态:
- Untracked:未跟踪,此文件未加入到git库,不参与版本控制。
- Unmodify:文件已入到git库中,未修改,文件内容与本地库的文件快照内容完全一致。
- Modified:文件已入到git库中,经过修改,文件内容与本地库的文件快照内容不一致。
- staged:暂存状态。
- committed:暂存区的修改提交到repository中
下图通过命令的形式,更加直观地表达出文件状态的转换过程。(committed状态同属于unmodified状态)
Git中的工作区和暂存区
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
三、Git远程GitHub仓库管理
创建ssh-key
$ ssh-keygen -t rsa -C "youremail@example.com"
将创建的id_rsa.pub
公钥复制粘贴到GitHub的ssh keys里面呢。
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。GitHub上创建repository
创建之后将本地创建的库同步到GitHub上
$ git remote add origin git@github.com:NoneFire/gitlearn.git
这里有个参考资料:github中ssh和https提交的区别 最明显的却别就是提交的时候是否需要验证身份。假如这一步配置错误GitHub的仓库地址,可以通过
$ git remote set-url origin git@github.com:NoneFire/gitlearn.git
重置url将远程仓库主分支的最新变化拉取下来
git pull origin master
这个命令适用于创建远程responsity的时候添加了文件或者创建了readme文件的情况。如果次数出现
fatal: refusing to merge unrelated histories
这种提示,参考git出现fatal:refusing to merge unrelated histories错误解决,主要解决方案就是在命令后添加allow-unrelated-histories
强制合并两个不同的仓库将本地分支提交远程仓库
$ git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
注意,这里push到远程仓库的是commit之后的数据。
如果提交失败的话,使用
ssh -T git@github.com
测试下是否是网络问题造成的提交失败。拉取远程分支并合并
1
2
3
4
5
6
7
8
9git checkout -b xx-master master
git pull git地址 master
#如果提示fatal: refusing to merge unrelated histories
git pull origin master --allow-unrelated-histories
#GitHub传输文件方式
git remote add origin git@github.com:NoneFire/web_study.git
git push -u origin master合并本地分支
1
2
3git checkout master
git merge --no-ff xx-master
git push origin master
四、Git分支管理
各个分支可以理解为不同的时间线,之前我们的操作都是在master主分支上进行的,接下来在分支上进行操作。
五、打标签
git tag
标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
六、忽略特殊文件
在.gitignore
这个文件里自定义规则。
七、常用git命令
1 | git add #把文件添加到版本控制系统,--all代表同步所有更改文件到暂存区 |
八、fork更新
https://www.jianshu.com/p/8ab6ef7ce5e3
1 | # 首先将本地分支关联到源分支 |