本地安装git
- 安装
- 配置姓名和邮件地址(仅需配置一次即可)
git config --global user.name "Your Name"
git config --global user.email you@example.com
版本控制——git管理文件夹
- 进入要管理的文件夹
cd git_demo
- 初始化,即:让git帮助我们管理当前文件夹
git init
- 管理
- 检测当前文件夹下的文件状态
- 红色文件名,代表已有修改,但尚未暂存(即
git add <文件名>
) - 绿色文件名,代表已经暂存,但尚未生成版本(即
git commit -m '<描述信息>'
)
- 红色文件名,代表已有修改,但尚未暂存(即
git status
- 建立跟踪 / 暂存文件
git add index.html // 对指定文件的修改建立跟踪
git add . // 对当前文件夹下修改建立跟踪
取消暂存
git rm --cached <文件>
- 提交文件,生成版本
git commit -m '<版本描述信息>'
- 查看版本记录
git log
git log --graph
git log --graph --pretty=format:"%h %s"
- 生成版本(目的)
git三大区域
- 工作区
- 暂存区
- 版本库
代码回滚
- 从3.0版本回滚到之前的2.0版本: 3.0 ==> 2.0
git reset --hard <2.0版本的版本号>
- 回滚后版本为2.0,再要求回到回滚前的3.0版本: 2.0 ==> 3.0
- 查看完整提交记录,通过
git reflog
可以查看所有版本的版本号
git reflog
- 查询到3.0版本的版本号,执行回滚
git reset --hard <3.0版本的版本号>
- 执行完毕后,此时版本再次位于3.0
小结
- 在工作区进行修改后,撤销修改
git checkout -- <要撤销修改的文件名>
- 提交到暂存区后,撤销暂存
git reset HEAD <要撤销暂存的文件名>
分支
创建新分支
- 查看分支(当前处于master分支)
git branch
- 从当前所在分支master,创建一个新分支:dev
git branch dev
- 从master分支切换到dev分支
git checkout dev
- 创建dev分支并切换到dev分支
如当前所在分支为master,则是从master中拆的新分支
git checkout -b dev
合并分支
将bugfix分支合入master分支
注1:操作时需要注意“谁并入谁”的问题
注2:合并时可能会产生冲突,如果冲突的话git会同时保留两个分支的内容,找到有冲突的文件,手动修改后再次git add
==> git commit
即可
- 切换到master分支
git checkout master
- 将bugfix分支合入master分支
git merge bug
删除分支
git branch -d <要删除的分支名>
基于GitHub做代码托管
推送代码至远程仓库
添加远程连接,给代码仓地址起个别名,默认添加在本地配置文件中(--local
)
git remote add origin https:<代码仓地址>
将本地的master分支的代码推送到远程仓库的master分支
注1:如果未设置别名,origin也可替换为直接输入代码仓地址
注2:-u
的含义为,将此次提交的地址和分支,保存为下一次推送的默认设置
git push -u origin master
将本地的dev分支的代码推送到远程仓库的dev分支
git push -u origin dev
从远程仓库克隆代码
注1:如果此时查看克隆下来的的代码分支,仅可查看到master,但实际所有分支均已拉取,可直接git checkout <分支名>
切换分支
注2:克隆的同事Git内部已经实现给代码仓起别名的效果git remote add origin https:<代码仓地址>
,默认别名为origin
git clone https:<代码仓地址>
从远程仓库拉取代码
从远程仓库,拉取dev分支的代码:
git pull origin dev
等同于
git fetch origin dev
git merge origin/dev
变基
简洁git commit记录
注:git rebase
时可能会产生冲突,解决冲突后执行git rebase --continue
即可继续
1.将多个commit记录整合为1个
将当前版本和指定版本之间的所有记录合并为一个:
git rebase -i <版本号>
从当前版本开始,找到3条记录合并为1个:
git rebase -i HEAD~3
注:合并记录时,不要合并已经push到远程仓库的记录
2.合并多个分支的commit记录
3.合并远程分支和本地分支的commit记录
beyond compare
快速解决冲突的软件。
1.安装beyond compare
2.在git中进行配置
git config --local merge.tool bc3 // 起名
git config --local mergetool.path '<beyond compare 安装路径>' // 配置安装路径
git config --local mergetool.keepBackup false // 处理冲突时不生成备份文件
注:--local
意为本次配置只在当前目录内有效
3.应用beyond compare解决冲突
git mergetool
多人协同开发
GitHub创建多人协同开发项目的方式
- 直接创建项目,然后邀请成员
- 创建组织 --> 邀请成员 --> 组织内创建项目
tag
给提交记录上打tag
git tag -a <要打的tag,譬如v1.0.0> -m '<tag描述信息>'
将本地打好的tag推送到远程代码仓
git push origin --tags
给开源项目贡献代码
1.fork源代码
将开源项目的代码拷贝到个人远程仓库
2.在个人远程仓库修改代码
3.给源代码作者申请pull request
配置文件
- 项目配置文件(项目/.git/config),即配置仅在当前项目内有效,如未配置,则向全局范围查找
git config --local user.name '<用户名>'
git config --local user.email '<用户邮箱>'
- 全局配置文件(~/gitconfig),即配置在内有效,如为配置,则向系统范围查找
git config --global user.name '<用户名>'
git config --global user.email '<用户邮箱>'
- 系统配置文件(/etc/.gitconfig),即配置在
注:需要有root权限
git config --system user.name '<用户名>'
git config --system user.email '<用户邮箱>'
免密登录
URL中体现
原来的地址:
git remote add origin https://github.com/<用户名>/git_demo.git
改写为:
git remote add origin https://用户名:密码@github.com/<用户名>/git_demo.git
SSH实现
- 本地电脑上生成公钥和私钥
公钥默认放在~/.ssh/id_rsa.pub
私钥默认放在~/.ssh/id_rsa
ssh-keygen
- 拷贝公钥的内容,并设置到GitHub中
Personal settings --> SSH and GPG keys --> New SSH key - 在git本地中配置ssh地址
git remote add origin <ssh协议地址>
配置后则无需再输入用户名和密码
git自动管理凭证
mac中可以在钥匙串中管理查看
gitignore忽略文件
git会读取项目内的.gitignore
文件,文件内写明的文件名(或写明的文件夹名下的文件)不再受git管理
注:.gitignore
文件也可以写入.gitignore
,则该文件也不再受git管理
更多参考
GitHub做任务管理
issues
文档及任务管理
wiki
项目文档说明