基本操作
用户操作:config
配置用户名和邮箱:
git config --global user.email zhen24
git config --global user.name zhen24
查看配置项
列表:git config --list --global
单个:git config --get user.name
初始化仓库:init
git init
- 用途:生成.git文件夹
查看仓库的状态:status
git status
向暂存区域添加文件:add
git add README.md
保存仓库历史记录:commit
git commit -m "log"
:git commit -am "log"
: add 和 commit 的合并操作,不然修改也需要先add- 一行日志使用-m,大量日志不要-m,会自动启动编辑器。若编辑器无信息,则中止提交。
查看日志:log/reflog
git log
/git reflog
git log
:显示所有提交记录git reflog
:看所有分支操作记录- 只显示一行信息:
git log --pretty=short
- 显示文件/目录相关信息:
git log dir/file
- 显示文件的改动:
git log -p
查看更改前后差别:diff
git diff
- 暂存区与工作目录差别:
git diff
- 工作目录与最新版本差别:
git diff HEAD
- 每次提交前最好都
git diff HEAD
,避免不该的该的被改了
分支操作
查看分支:log --graph/branch
git branch
/git log --graph
- 标有*的表示当前分支
git log --graph
:以图表形式查看分支
创建与切换分支:checkout
git checkout [-b]
:创建-b
,切换不用- 创建分支不需要连接中央仓库
- 分支的概念:git中的分支为特性分支,分支具有单一特性
- 主干分支(master):不应存在半成品,各个特性完成后,合成至主干。
合并分支:merge
git merge --no-ff
--no-ff
:禁用快进式分支- 快进式:合并的分支A作为master
- 禁用快进式:合并的分支A与原master合并,生成新的对象提交
更改提交
版本回溯:reset
- 回溯根据hash值:
git reset --hard fd0cbf0d4a25f747230694d95cac1be72d33441d
- 使用
git reflog
获取hash值,哈希值只要输入 4 位以上就可以执行
消除冲突:add&&comit
- 合并若产生冲突时,会把冲突文件合成到一个文件里,
- 此时修改该文件,添加进缓存区
git add
,再提交git commit
,即可解决冲突
修改日志:commit --amend
git commit --amend
- 输入后启动编辑器,编辑保存即可
压缩历史:rebase
git rebase -i [version]
- rebase 的前提是仓库的文件,均已全部提交
推送至远程仓库
添加远程仓库:remote add
git remote add origin url
- origin:远程仓库标识
- url:远程仓库URL
推送至远程仓库:push
git push -u origin branch
- origin:远程仓库标识
- branch: 本地分支
- -u:origin与branch建立关联关系,origin的branch为本地的branch的upstream,获取可直接pull
从远程仓库获取
获取远程仓库:clone
-
git clone url
-
执行
git clone
会默认处于master分支下,同时会自动将origin设置成该远程仓库的标识符。 -
获取远程分支:
git checkout -b feature- D origin/ feature- D
获取远程分支最新的内容:pull/fetch
git pull origin feature-D
:将最新内容拉下来后直接合并git fetch
:将最新内容拉到本地,检查后决定是否合并git pull = git fetch + git merge
Github Pull Request 交互
发送Pull Request
请求对方仓库采纳我们我们的代码
Fork
:界面操作,Fork出一个自己的仓库clone
:把代码下载到本地branch
:在特性分支中开发,明确开发的主题push -u
:创建远程仓库Creat Pull Request
:界面操作,确认要发送的内容,填写请求采纳的信息。
对于较大的工程量,可已经分批Pull Request
,但要在采纳信息中填好Tasklist,标记哪些已完成,哪些在开发中- 仓库维护: 关注原仓库,但原仓库有重大更新是需要,进行同步更新
- 如果是无条件同步,直接在网页同步,
git push
即可 - 如果原仓库的代码不一定要全部同步过来,则需要是先拉,再合并,再上传,
git remote add
git fetch
git merge
git push
- 如果是无条件同步,直接在网页同步,
采纳Pull Request
- 代码审查
- 在Github查看代码,并给予评论(适用于小修改;大修改,先获取再评论)
- 获取发送方仓库:
git pull
- 创建用于检查的分支:
git check out -b
- 删除:
git branch -D
- 采纳
- 小修改:
Merge pull request(界面操作)
- 大修改:使用检查的仓库
git push
- 小修改:
问题与解决方法
分支切换失败
现象
error: Your local changes to the following files would be overwritten by checkout:
协议与库/码流封装.md
Please commit your changes or stash them before you switch branches.
原因
当前分支有未跟踪的文件,checkout 命令会覆盖它们,请缓存( stash )或者提交( commit )。
解决方案
git add && git commit
:保存修改
git add && git stash
:存入缓存
git clean -f/-n
: 清除文件(-f)/清除(预览)
推送远程仓库失败
现象
error: failed to push some refs to ''
原因
由于远程仓库中代码版本与本地不一致冲突导致
解决方案
git pull
:先拉取远程仓库实现同步,再推送,如有有冲突要先解决冲突
ean -f/-n`: 清除文件(-f)/清除(预览)