Git教程
1.创建版本库
选一个合适的文件夹(不一定要非空)
2.添加文件到版本库
2.1 添加文件
2.2 提交文件
为什么git添加文件需要add, commit两步呢?
因为commit可以一次提交很多文件,所以你可以多次add不同的文件
3.各种查看
4.版本回退
5.工作区和暂存区
git add添加到暂存区
git commit 提交到当前分支
git commit 只会提交已经add了的修改, 如果你在add之后再次修改该文件而不再次add, 此时commit的话这次修改不会被提交
6.撤销修改
如果文件修改了还没git add, 则会撤销这次修改
如果文件已经git add了, 然后又修改了, 则会回到add之后修改之前的版本
7.删除文件
8.远程仓库
现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步
8.1关联本地仓库和远程仓库(github)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o39xo8dl-1610182303632)(https://ooo.0o0.ooo/2017/03/16/58ca05a5e66a9.png)]
8.2将本地仓库的内容推送到远程仓库
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
8.3将远程仓库的内容克隆到本地
9.分支管理
9.1创建并合并分支
9.2解决合并分支时的冲突
git checkout -b feature1 # 准备新的feature1分支
git add readme.txt # 修改readme.md并在feature1分支上提交
git commit -m “add_feature1”
git checkout master # 切换到master
git add readme.txt # 在master分支上修改文件并提交
git commit -m “add_master”
现在master分支和feature1分支都有了各自的新的提交
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3yzJQpFb-1610182303633)(https://ooo.0o0.ooo/2017/03/16/58ca0a1683f27.png)]
这种情况下, git无法执行快速合并, 只能试图将各自的修改合并起来,但是这样合并可能会有冲突 ``` $ 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告诉我们readme.txt存在冲突, 必须手动解决冲突再提交, git status也可以告诉我们冲突的文件 `git log --graph # 可以查看分支合并图`
9.3分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
可以看出, 不使用fast forward模式, merge后就像这样:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wKBinZdK-1610182303634)(https://ooo.0o0.ooo/2017/03/16/58ca0c3c0076b.png)]
9.4分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OCl65D4z-1610182303635)(https://ooo.0o0.ooo/2017/03/16/58ca0c6f7fde4.png)]
10.bug分支
pass
11.feature分支
Feature分支
阅读: 229523
软件开发中,总有无穷无尽的新的功能要不断添加进来。
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
现在,你终于接到了一个新任务:开发代号为Vulcan的新功能,该功能计划用于下一代星际飞船。
于是准备开发:
5分钟后,开发完毕:
切回dev,准备合并:
一切顺利的话,feature分支和bug分支是类似的,合并,然后删除。
但是,
就在此时,接到上级命令,因经费不足,新功能必须取消!
虽然白干了,但是这个分支还是必须就地销毁:
销毁失败。Git友情提醒,feature-vulcan分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用命令git branch -D feature-vulcan。
成功删除
12.多人协作
多人协作的工作模式通常是这样:
- 首先,可以试图用git push origin branch-name推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
- 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
13.标签管理
13.1创建标签
13.2标签的操作
14.自定义git
git config --global color.ui true # 让git显示颜色
15.忽略特殊文件
在.gitignore文件中加上不想推送的文件类型
16.配置命令的别名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LC8teZsd-1610182303636)(https://ooo.0o0.ooo/2017/03/16/58ca270f07d4e.png)]