学习手札 | Git 与 GitHub 学习笔记
关于Git与Github的基础知识的笔记
GitHub与Git区别
- Git属于分散型版本管理系统,开发者使用Git将源代码存入名叫“Git仓库”的资料库中并加以使用。
- GitHub 是在网络上提供 Git 仓库的一项服务,使用 GitHub 可以实现多人协作
Git初始设置
git config命令的–global参数
- 设置Git提交时的姓名与邮箱
1 | $ git config --global user.name "justlovesmile" |
- 让命令的输出具有更高的可读性
1 | $ git config --global color.ui auto |
创建版本库
- 把这个目录变成 Git 可以管理的仓库
1 | $ git init |
- 将文件添加到仓库缓冲区
1 | $ git add hello_world.php |
- 添加说明并正式提交
1 | $ git commit -m "wrote a file" |
- 查看提交日志
1 | (1)$ git log(+文件名) |
- 查看仓库状态
1 | $ git status |
- 查看修改的不同之处
1 | $ git diff read.txt |
- 回退版本到上一个版本
1 | $ git reset --hard HEAD^ |
(回退后就看不见之前那个了,但是如果还没关命令窗口可以向上查找commit id然后再👇)
1 | $ git reset --hard 1094a(id不一定要写全) |
- 使用cat查看文件内容
1 | $ cat read.txt |
- Git提供了查看你的每一次命令的方法
1 | $ git reflog |
- 丢弃工作区修改(当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时)
1 | $ git checkout -- read.txt |
- 撤销暂存区的修改(当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD
,就回到了工作区的修改,再执行👆)
1 | $ git reset HEAD read.txt |
- 删除文件
1 | $ rm read.txt |
- 删除版本库
1 | $ git rm read.txt |
- 误删恢复
(用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”,但是会失去最近一次提交后的修改内容)
1 | $ git checkout -- test.txt |
远程仓库
- 创建SSH Key
1 | $ ssh-keygen -t rsa -C "youremail@example.com" |
- 查看id_rsa.pub文件,并复制
1 | $ cat ~/.ssh/id_rsa.pub |
-
然后再在github中添加ssh key
-
输入命令测试
1 | $ ssh -T git@github.com |
-
在github中创建一个git仓库
-
关联远程库
1 | $ git remote add origin git@github.com:Justlovesmile/Hello-World.git |
- 将本地库的所有内容推送到远程库上
1 | $ git push -u origin master |
- 从现在起,只要本地作了提交,就可以通过命令:
1 | $ git push origin master |
- 克隆远程库到本地库
1 | $ git clone git@github.com:Justlovesmile/practice.git |
分支管理
创建于合并
- 创建dev分支,并切换
1 | $ git checkout -b dev |
- 查看分支
1 | $ git branch |
- 在切换到分支后,可以在分支上继续修改文件,再提交
- 然后切回master
1 | $ git checkout master |
此时,master上看不见分支
- 将分支的工作结果与master合并
1 | $ git merge dev |
- 合并完成后删掉分支
1 | $ git branch -d dev |
出现冲突的情况
- 如果创建了分支,并进行了修改与提交
- 而master也进行了提交,那么两者就不能直接进行合并,需要检查冲突手动修改
1 | $ git status(会告述你哪里冲突了) |
- 查看合并情况图
1 | $ git log --graph --pretty=oneline --abbrev-commit |
分支管理
-
一般master仅用来发布新版本,其他工作,修改在分支上进行
-
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
1 | $ git merge --no-ff -m "merge with no-ff" dev |
bug分支
- 当工作只进行了一半,但是又要修改另外的bug时,可以将工作现场先储藏起来
1 | $ git stash |
- 然后再创建一个分支,例如叫issue,在这上面修改bug
- 再提交,然后切换回master合并,最后删除这个分支
- 切回之前工作的分支,恢复工作现场
强制删除分支
- 如果分支中的修改已经提交,但是发现不能加到master中,并且,该修改属于机密,所以你需要强制删除该分支(因为系统会提示你该修改未合并,使用D)
1 | $ git branch -D feature |
多人协作
- 查看远程库的信息
1 | $ git remote |
- 查看远程库的详细信息
1 | $ git remote -v |
- 推送master主分支
1 | $ git push origin master |
- 推送其他分支
1 | $ git push origin dev |
- 抓取分支
1 | $ git clone git@github.com:Justlovesmile/Hello-World.git |
- 多人协作的工作模式通常是这样:
- 首先,可以试图用
git push origin <branch-name>推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull试图合并; - 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin <branch-name>推送就能成功!
- 首先,可以试图用
- 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令
git branch --set-upstream-to <branch-name> origin/<branch-name>。
标签
创建标签
- 切换到需要打标签的分支上
1 | $ git branch |
- 创建标签
1 | $ git tag v1.0 |
- 给对应的版本打上标签
1 | $ git tag v0.9 f52c633 |
- 标签它是按字母排序的,查看标签
1 | $ git show v0.9commit f52c63349bc3c1593499807e5c8e972b82c8f286 (tag: v0.9) |
- 创建带有说明的标签,用-a指定标签名,-m指定说明文字:
1 | $ git tag -a v0.1 -m "version 0.1 released" 1094adb |
操作标签
- 删除标签
1 | $ git tag -d v0.1 |
- 推送某个标签到远程
1 | $ git push origin v1.0 |
- 一次性推送全部尚未推送到远程的本地标签:
1 | $ git push origin --tags |
- 如果标签已经推送到远程,又想要删除标签,先从本地删除
1 | $ git tag -d v0.9 |
然后再从远程删除
1 | $ git push origin :refs/tags/v0.9 |
github
- 对于感兴趣的项目,先点Fork克隆仓库,然后再从自己的账号下clone
1 | git clone git@github.com:michaelliao/clone.git |
码云gitee.com
- 国内的Git托管服务
自定义git命令
- 自定义st表示status
1 | $ git config --global alias.st status |
- 修改在配置文件.gitconfig中
- 感谢您的赞赏
赞赏名单
你的支持是我持续创作的动力。
本文是原创文章,采用CC BY-NC-SA 4.0许可协议,完整转载请注明来自XMJ's BLOG
评论 ()








