[学习笔记]Git与Github
[学习笔记]Git与Github
学会Git玩转Github
1-使用Github(目的,基本概念,注册账号)
-
目的:借助github托管项目代码
-
基本概念
-
仓库(Repository)
- 仓库用来存放项目,每个项目对应一个仓库
-
收藏(Star)
- 收藏后在个人中心可查看到
-
复制克隆项目(Fork)
- fork的会有标识表示fork自哪个仓库
-
发起请求(Pull request)
- 李四修改后pullrequest 等待张三同意合并
-
关注(Watch)
- 订阅该项目的更新通知提醒
-
事务卡片(Issue)
- 发现需要修改的地方,想通知仓库主并讨论,问题ok了可以close掉
-
-
基本概念2
- Github主页
- 仓库主页
- 个人主页
-
注册账号
- 可以创建公开仓库或私有仓库(现在免费了).私有仓库只能自己或者指定的朋友才有权限操作
- 因为github服务器在国外,可能需要FQ(shadowsock)
2-使用Github(创建仓库,仓库主页说明)
- 仓库/项目名称(Repository name)应该英文
3-使用Github(仓库管理)
- 新建文件需要加后缀 加入仓库需要Commint并注释
- 点击"创建php1文件"可以看提交前后对比类似svndiff,点击左侧文件名直接查看文件(继而进行编辑,删除的操作)
- 每次修改文件也需要 Commit Change
- 此处可点击commits查看log/history
- 上传(upload file)和查找(Go to file)
- 下载/检出
4-使用Github(Github Issues)
- 作用:发现代码BUG,但是目前没有成型代码,需要讨论使用;或者使用开源项目出现问题时使用
- 双方都可以close issue
- 可以查看未关闭的/已关闭的issue
5-使用Github(基本概念实战)
-
用户名可以改
-
对项目提issue就有贡献contribute
-
fork 到自己的仓库修改后可以pull request
-
仓库主 查看确认是否合并
-
开源项目贡献
-
1)新建issue 提交使用问题或者建议/想法
-
2)pull request
- 1,fork 项目
- 2,修改自己仓库的项目代码
- 3,新建 pull request
- 4,等待作者操作审核
-
6-安装Git
-
目的:通过git管理github托管项目代码
-
下载安装
7-Git基本工作流程
-
概念
-
工作区(Working Directory)
- 添加,编辑,修改文件等动作
-
暂存区
- 暂存已经修改的文件最后统一提交到git仓库
-
Git Repository(Git仓库)
- 最终确定的文件保存到仓库,成为一个新的版本,并且对他人可见
-
-
向仓库中添加文件流程
8-Git初始化及仓库创建和操作
-
基本信息设置
- 1.设置用户名 git config --global user.name "itcast"
- 2,设置用户名邮箱 git conifg --global user.email 'itcast@itcast.com'
- 3.用git config --list查看已设置的信息
-
初始化
- 1.cd test
- 2.git init
-
添加/修改文件
- 修改后也需要通过git add添加到暂存区
-
删除文件
- 1.删除文件 rm test.php
- 2.从Git中删除文件git rm test.php
- 3.提交操作git commit -m "提交描述"
9-Git管理远程仓库
-
之前的操作都是本地仓库
-
使用远程仓库的目的,作用:备份,实现代码共享集中化管理
-
git clone 仓库地址
- 仓库地址
-
git push 本地操作完后通过git push将本地仓库同步到远程仓库
-
解决git push错误
10-Github Pages 搭建网站
-
个人站点
-
访问:https://用户名.github.io,也可以自己绑定域名
-
搭建步骤
-
1)创建个人站点
- 新建仓库(注:仓库名必须是[用户名.github.io])
-
2)在仓库下新建index.html的文件即可
-
-
脚下留心
- 1.github pages仅支持静态网页
- 2.仓库里面只能是.html文件
-
-
项目站点
-
搭建步骤
- 1)进入项目主页,点击setttings
- 2)在setttings页面,[launch automatic page generator]来生成主题页面
-
网页修改
- 可以重新[launch automatic page generator]
- 更细致的修改需要在项目页面 点击branch选中page,能看到html文件
11-其他
-
利用github Issue写博客
- GitHub Issues 天然支持程序员最爱的 Markdown 格式,用来记录,很舒服
- GitHub 可以 Watch,还可以针对单条 Issue 进行 Watch / Unwatch. 这功能在很多成熟的博客系统里都还没有呢。
- 优点:免费,markdown,代码高亮,标签系统,评论系统
- 缺点:没法自定义样式、域名、没法加社交分享按钮,没法嵌入自定义 html 内容。
-
git修改已经提交到远程仓库的log(修改最近的log)
- git commit --amend
- 弹出vim修改log,i输入后wq
- git push --force
Git基本原理介绍
8. Branch和HEAD
- 分支的定义
- HEAD的定义
- 使用分支切换命令,HEAD指向dev
- HEAD的内容(git log退出按q)
- 也可git log --oneline
9. 分支操作的背后
-
命令
-
git branch
- 列出当前拥有的分支
-
git branch <branch_name>
- 新建分支
-
git branch -D <branch_name>
- 删除分支,但不能删除当前活跃分支
-
git checkout <branch_name>
- 分支切换
-
-
分支示例
- git branch dev,git checkout dev之后可进行修改提交
- git branch -d(--delete) 与-D的区别:-d会提示合并merge,-D无提示,建议-d
10.checkout特定的commit
-
使用场景1,版本回退
- 普通回退,git log获取SHA-1值
- git checkout
- git checkout -b <new_branch_name>
-
使用场景2,找到误删的分支
- git branch -D 删除只是删除指向分支的指针,分支本身还在
- 找到误删的分支,通过git reflog获得所有操作记录以及SHA-1值
- git checkout
- git checkout -b <new_branch_name>(brand_name可以为之前删除的名字)
11.聊聊git diff命令
- diff功能还是IDE,GUI好看
12.Git Merge -Fast Forward
-
在master上创建bugfix分支
- 使用git merge bugfix会使master指向C3
-
命令
- 在master上git checkout -b bugfix
- 修改,add,commit
- git checkout master回到master
- git merge bugfix
-
扩展
- 做了以上动作后,发现错了需要归滚使用git reset ORIG_HEAD(会把bugfix指针删除)
20/21.Git Merge -3 Way merge
-
master分支多走了一个commit
- git merge bugfix后C5有两个parent
-
借助sourcetree软件可以看到二维的关系图
-
对于不冲突的commit(没有去修改同一个文件),git merge bugfix后git会自己处理
-
带冲突的merge
- git merge bugfix会提示错误并把test.txt加上冲突的内容
- 自行将test.txt修改,可借助vscode按操作按钮
- git add test.txt提交修改
- git commit后进入vim,确认后:wq
22.什么是git rebase
-
git rebase只推荐在个人使用的dev分支使用
-
git rebase后再merge可以使comit历史从二维转为线性
- 在dev分支 git rebase master,dev的commit SHA1值变了(因为commit的时间被修改了)
23.标签Tag到底是怎么回事
-
tag操作
-
创建tag
-
git tag
- 创建light weight tag
-
git tag -a
-m - 创建annoted tag不止指针而且有对象,包括email,date等信息
-
git tag -a
- 为之前的commit创建tag
-
-
列出tag
- git tag
-
删除tag
- git tag -d
只删除了tag指针
- git tag -d
-
24/25.本地分支和远程分支
-
git branch查看的是本地的分支
-
git branch -r 才能查看远程分支(需要先git fetch)
-
git fetch将远程仓库同步到本地的remotes/origin/master镜像
-
git remote show origin会连接网络显示本地与远程仓库关联(是否tracked)
-
如果远程删掉了分支,通过git fetch不会更新本地镜像。用git fetch --prune才可以也删除掉本地的镜像
-
git fetch完再git merge origin/master才能把远程分支同步到本地分支,这两个命令组成git pull
26.git fetch&git pull
-
当本地与远程都提交了commit
- 执行完上述操作还需要git push origin master同步到远程
27.什么是FETCH_HEAD
- FETCH_HEAD第一行是执行上次git fetch的branch信息
Git Best Practice
1.拥抱命令行,远离IDE图形界面
2.写好每一条commit message
3.用好.gitignore文件
- 应该在项目早期就上传.gitignore来排除生成文件
- https://github.com/github/gitignore
4.基于分支或者fork的开发模式
5.Release 版本分支和Tag
- 比较常用的一种tag版本规划
6.如何修改最后一次commit
-
应用情景
- 提交的修改有问题
- commit message写错了
-
步骤
- 修改之后git add hello.py
- git commit --amend
- 弹出vim修改log,i输入后wq
- git push origin main --force
-
注:在多人共用的分支中慎用git commit -amend