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