推荐学习地址:
廖雪峰的官方网址:
1、生成 ssh id ssh-keygen -t rsa 一路回车就ok了
生成两个文件:id_rsa id_rsa.pub
2、github添加ssh key, 内容是id_rsa.pub文件里的。
3、 添加所有修改
git add -A git commit -m "update files" git push
4、 创建私人博客
初始化一个git仓库,使用git init命令。 添加文件到git仓库,分两步:
- 使用命令git add <file>, 注意, 可反复多次使用,添加多个文件。 git add -A 添加所有修改。
- 使用命令git commit完成。
- 要随时掌握工作区的状态,使用git status命令。
- 如果git status告诉文件被修改过,用git diff 可以查看修改内容。
- git log命令显示从最近到最远的提交日志。
版本回退:
-
HEAD 指向的版本就是当前版本,因此, Git允许我们在版本的历史之间穿梭,使用命令 git reset --hard commit_id
-
穿梭前,使用git log 可以查看提交历史,以便确定要回退到哪个版本。
-
要重返未来,用git reflog查看提交历史, 以便确定要回到未来的哪个版本。
工作区和暂存区:
- 用git add 把文件添加进去,实践上就是把文件修改添加到暂存区。
- 用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在, git commit 就是往master分支上提交更改。
管理修改: 每次修改,如果不add到暂存区,那就不会加入到commit中。
撤销修改:
-
当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令 git checkout --file
-
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步: 第一步用命令git reset HEAD file ,就回到了场景1, 第二步按场景1操作。
-
已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退, 不过前提是没有推送到远程库。
删除文件
- 命令git rm 用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心 误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
添加远程库:
- 要关联一个远程库, 使用命令 git remote add origin github地址
- 关联后,使用命令 git push -u origin master第一次推送master分支的所有内容。
- 此后, 每次本地提交后,只要必要,就可以使用命令git push orgin master 推送最新修改。 分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是没有联网都可以 正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完全了同步
从远程克隆: 要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone 命令克隆。 Git支持多种协议,包括https, 但通过ssh支持的原生git协议速度最快。
创建与合并分支:
Git鼓励大量使用分支: 查看分支:git branch 创建分支: git branch <name> 切换分支: git checkout <name> 创建+切换分支: git checkout -b <name> 合并某分支到当前分支: git merge <name> 删除分支: git branch -d <name>
开发一个新feature,最好新建一个分支; 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
解决冲突:
当git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,在提交,合并完成。 用git log --graph命令可以看到分支合并图。
分支管理策略:
在实际开发中,我们应该按照几个基本原则进行分支管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; 那在哪干活呢? 干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本 发布时,再把dev分支合并到master上,在master分支发布1.0版本;再把dev分支合并到master上,在master分支发布1在master分支发布1.0版本。 你和你的小伙伴每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出曾经做过合并,而 fast forward合并就看不出来曾经做过合并。
Bug分支:
修复bug时,我们会通过创建新的bug分支进行修复然后合并,最后删除;当手头工作没有完成时,先把现场git stash一下,然后去修复bug, 修复bug后,在git stach pop 回到工作现场。
Feature分支:
在软件开发中,总有无穷无尽的新的功能要不断添加进来.添加一个新功能时, 你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。开发一个新feature,最好新建一个分支;如果要丢弃一个没有被合并过的分支,可以通过git branch -D强行删除。
多人协作:
创建标签:
命令 git tag用于创建一个标签,默认为HEAD, 也可以指定一个commit id;git tag -a -m "blablabala...."可以指定标签信息;git tag -s -m "blabalbla.." 可以用PGP签名标签;命令git tag可以查看所有标签。
删除标签:
命令git push origin可以推送一个本地标签;命令git push origin --tags 可以推送全部未推送过的本地标签;命令git tag -d 可以删除一个本地标签;命令git push origin :refs/tags/ 可以删除一个远程标签。