以下笔记是学习廖雪峰Git教程时总结的
1.写在前面
学习还是要多动手,自己创建一个仓库LearnGit,专门用来学习Git,这样也不用担心胡乱修改之后,会有所损失
2. 测试:直接在远程库修改,看本地使用pull之后的结果,是本地能直接被修改,还是要手动修改?
结果:(若只是远程库修改,本地未修改该文件,那么pull之后,本地的文件里会自动修改)
3. 创建版本库
git init:初始化本地的一个目录,将它变为可管理的仓库
git status:查看当前目录中的文件和work space中的差异(即查看是否有文件被修改)
git add file:
git commit -m '描述':如果有多个文件被修改,最好每个文件都执行以下git add file,而不要git add .,因为执行git add file之后,可以紧跟着执行commit,这样提交之后,你的每个文件都对应了不同的描述,便于别人和自己查看
git diff file:当有文件被修改时,想要查看这个文件修改了什么,可以使用git diff file查看
4. 版本回退
版本类似于快照,每次执行git commit命令,其实就是增加一个版本
git log:查看所有版本,如果想要显示的内容比较清晰,可以使用git log --pretty=oneline
git reset --hard HEAD^:回退到上一个版本,也就是上一次提交commit时文件的样子
git reflog:显示你之前是哟用过的命令,这样如果你版本回退后,又想回到回退前,那么使用该命令查看之前使用过的命令,然后找到上一回执行回退命令那个地方,找到执行回退时上一回的版本号的id,然后执行git reset --hard id号,就可以了。
HEAD表示当前版本,HEAD^表示上一个版本,类推HEAD^^,回退的多时,例如回退100,那么就是用HEAD~100
5. 工作区和暂存区
.git是Git的版本库,Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
工作区就是我们的工作目录,当执行git add file之后,其实就是将文件file传到暂存区,然后使用git commit 时,就是将暂存区的内容全部提交到当前分支
6. 撤销修改
当工作区的内容写错时,想要撤销这些修改 可以手动将刚刚修改过的改回去。也可以使用git checkout -- file,不过这样只能是将工作区的修改撤销,如果已经执行了add的话(即已经将修改增加到暂存区,那么就不能用这个方法)
当已经将修改放到暂存区后,想撤销也可以,就是先利用版本回退思想,但是也不是真正的版本回退,因为这次我们使用的命令是git reset HEAD file,只是针对将某个文件回退,回退之后暂存区的内容将被放回工作区,然后就是用工作区撤销的方法撤销即可
步骤:git reset HEAD file, git checkout -- file
7. 删除
如果本地有个文件已经提交到版本库(commit),但是本地不小心将它删除了,这时使用git status可以看到这个文件确实在本地删除了,但是版本库中还有这个文件。这时就有两种选择
i. 确实想删除这个文件,所以现在就是要将版本库里的这个文件也删除,那么使用命令git rm file
ii. 误删了该文件,现在想恢复该文件,使用git checkout -- file
8.创建及合并分支
i. 创建dev分支,并切换到dev:
git checkout -b dev:创建并切换,等价于git branch dev, git checkout dev两条命令
ii. 查看分支:git branch
iii. 合并某分支到当前分支:git merge <name>
iv. 删除分支:git branch -d <name>
9. 解决冲突
当各个分支都修改了某个文件,这样就会产生冲突,合并的时候也就不能直接用git merge <name>了,需要手动合并
i. 查看文件都有哪些地方产生冲突:cat file, 或者直接打开文件看有哪些地方冲突,修改完成之后,重修嘎提交就可以了
ii. 用到的命令:修改完后要执行add,和commit,这样分支就合并了。
iii. 合并之后,可以用命令git log --graph --pretty=oneline --abbrev-commit查看分支的结果
10. 分支管理策略
通常合并分支时,Git会用Fast forward模式,但是这种模式在删除分支之后,就会丢失分支的信息,也就从主线上看不出这个地方别合并过。所以建议合并时使用--no-ffde方式的git merge
即:git merge --no-ff -m '合并分支' dev
11. Bug分支
i. 如果正在一个分支上工作,但是还未完成不能提交,但是又要求你先改了某个Bug,因为该Bug必须赶紧改了之后,合并到master分支,所以你只能先创建一个新的分支去修改,然后合并之后,在切回当前的分支,继续工作。
ii. 所以要先保护现场,使用git stash
ii. 创建新的分支修改,合并到master分支,删除新建的分支,切回之前工作的分支
iii. 恢复现场:用git stash list查看有哪些现场被保护了。恢复现场有两种方法:一是使用git stash apply恢复,但是恢复后,stash内容并未删除,需要用git stash drop来删除。第二种方法是使用git stash pop,恢复的同事吧stash内容也删了。
12. Feature分支
要删除某个未合并的分支(可能取消了该分支的功能),所以不能用git branch -d dev,而要用git branch -D dev
13. 创建标签
i. git tag <tagname>:创建新的标签,默认为HEAD, 也可以指定一个commit id;
ii. git tag -a <tagname> -m "tag info" commit id:指定标签信息;也就是一个对该标签的一个说明
iii. git tag:可以查看所有的标签
14. 操作标签
i. git push origin <tagname>: 推送一个本地标签
ii. git push origin --tags: 推送全部未推送过的本地标签;
iii. git tag -d <tagname>: 删除一个本地标签
iv. git push origin :refs/tags/<tagname>: 删除一个远程标签
15. 多人协作
这部分不是很清楚,先放一个链接吧:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320
16. 使用github
如何为感兴趣的项目贡献自己的力量
i. fork别人的项目到自己的GitHub的仓库下
ii. 从自己的仓库里clone一份到本地,注意,是要从自己的仓库里clone,因为别人那么你即便克隆下来,也不能推送
iii. 然后就可以在GitHub上发起一个pull request,等待对方的回应。