电子版章节来自于:https://git-scm.com/book/en/v2
中文书名精通Git(第二版)。
笔记中部分截图来源于书本电子版、runoob的Git专题、网络。
概念图:
集中式版本管理系统(SVN) 分布式版本管理系统(GIT)
Git 采用的校验和机制SHA-1散列,信息的散列值。
Git区域:
配置 名字 & 邮箱:
git config --global user.name "Yourname"
git config --global user.email [email protected]
git config --global core.editor 设置编辑器
命令别名
git config --global alias.co checkout
git config --global alias.ci commit -> git commit git ci
git config --global alias.unstage 'reset HEAD --' -> git unstage fileA = git reset HEAD --fileA
git config --global alias.last 'log -1 HEAD' ->git last 查看最后一次提交信息
git config --global credential.helper cache 设置凭据缓存,避免推送都键入密码,设置Time
常用命令:
git config --list 检查个人设置
git help
git init -- 初始化,对现有项目进行跟踪管理 master(初始分支的默认名称)
git clone [url] -- 克隆仓库 origin 远程仓库的默认名称
git status -- 查看当前文件状态
-s 显示简洁状态信息 /*??未被跟踪的新文件 A已暂存的新文件 M已修改的文件*/
git add xxx -- 跟踪新文件/暂存文件/存在合并冲突的文件记为已解决/理解为“添加内容到下一次提交中”
cat .gitignore -- 忽略文件格式参考: https://github.com/github/gitignore
git diff --查看不同内容对比,只显示出还没有进入暂存区的变更。
--staged / --cached 查看哪些已暂存的内容会进入下一次提交
git commit --提交变更,打开所选择的文本编辑器,填入备注信息(本地版本库)
-m "所需要的备注信息"
-a --跳过暂存区提交(git自动把已跟踪的所有文件添加到暂存区)
--amend重新提交,第二个提交命令修正第一个提交的结果
git rm xxx -- 从暂存区移除
--cached xxx
Example:
git rm log/\*.log 移除log目录中所有扩展名为.log的文件
git rm \*~ 移除所有以~结尾的文件
rm xxx --删除文件
git mv xxx www --移动文件/重命名
git log -- 查看提交历史
-p -2 显示出最近2次提交说引入的差异
--stat 简要统计信息
--since=2.weeks 时间限制输出
--author查找某位作者的提交
-S过滤
--pretty 更改日志输出的默认格式 例如:
pretty=oneline/short/full/fuller/format:"%h - %an, %ar : %s"
format格式:
%H 提交对象(commit)的完整哈希字串%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串%p 父对象的简短哈希字串
%an 作者(author)的名字%ae 作者的电子邮件地址
%ad 作者修订日期(可以用-date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址%cd 提交日期
%cr 提交日期,按多久以前的方式显示%s 提交说明
git reset HEAD xxx 撤销已暂存的文件
git checkout -- xxx 撤销对文件的修改
git remote -v 显示远程仓库对应URL
git remote 查看当前配置有哪些远程仓库,
git remote add [shortname] [url] 添加一个远程仓库
git fetch[remote-name] 从远程项目获取数据
git push [remote-name][branch-name] 将数据推送到远程仓库
git remote show [remote-name] 检查远程仓库信息
git remote rename [oldname] [newname] 重命名远程仓库 分支名称也会改变
git remote rm [协作者的名字] 删除某个远程仓库地址
标签:
git tag 列举标签
Example:
git tag -a v1.4 -m "myversion 1.4" -a创建注释标签 -m随标签创建而存储
git show v1.4 看到标签数据信息以及对应的提交
git tag v1.4-lw 轻量标签
补加标签
git log --pretty=oneline 查询到SHA-1
git tag -a v0.1 SHA-1前几位
共享标签
git push xx [tagname]
git push xx --tags推送所有tags
git checkout -b [branchname] [tagname] 检出标签
3.1.1创建新分支
git branch [name]
git log --oneline --decorate 查看分支指向对象
3.1.2切换分支
git checkout [name]
切换分支commit之后,再切换回master分支,工作目录下的文件已恢复到master分支指向的快照状态,回滚了在checkout分支后的工作。
此时再修改,commit一次,将出现分叉,得到新的分支。
利用 git log --oneline --decorate --graph --all 可以看到分叉的信息
3.2 基本的分支与合并操作
git checkout -b [name] -> git branch [name] & git checkout [name]
git checkout -b Abranch origin/Abranch 创建自己的本地Abranch分支
制作热补丁,并入分支 git merge [name]
"fast-forward"顺着其中一个提交历史直达另一个提交,简化合并操作,移动指针。
删除分支 git branch -d [name] -D强制删除
图形化工具解决冲突 git mergetool
3.3分支管理
git branch 分支简短列表,*当前所在分支(HEAD指向的分支)
-v 查看最新提交
git branch --merged 筛选已并入当前分支的所有分支
git branch --no-merged 筛选尚未并入的所有分支
长期分支
master develop topic 对应不同的开发周期不同阶段
主题分支-本地仓库进行
远程分支
指向远程仓库的分支指针,自动更新,类似书签。
git fetch origin[name] 与服务器同步
3.5推送
与别人共享某个分支上的工作成果
git push [remoteName] [branchName]:otherName
3.5.2跟踪分支
自己选择设置其他的跟踪分支,在本地创建分支用跟踪远端非master分支
git checkout -b [branch] [remotename]/[branch]origin/special
git checkout --track [remotename]/[branch]
本地已存在的分支设置跟踪分支,或者更改本地分支对应的远程分支
git branch -u [remotename]/[branch]
git branch -vv查看已经设置了哪些分支
3.5.3拉取
git fetch 拉取本地没有的远程所有最新的数据
git pull等同于 git fetch->git merge
3.5.4删除远程分支
git push origin --delete [branch]
3.6变基
更改一个分支整合到另一个分支,两种方式:merge or rebase
3.6.1基本变基
找到两个要整合的分支的共同祖先,取得当前所在分支的每次更变(diff)
git rebase [branch]
变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是找出两个分支末端,并把它们合在一起。
3.6.2分支工作在变基目标分支之外的分支上重现
git rebase --onto master server client
对master分支进行快速合并操作
git checkout master
git merge client
效果如图:
git rebase master server
git checkout master -> git merge server
git branch -d client ->git branch -d server
3.6.3rebase的潜在危险
不要对已经推送到远程服务器的提交执行变基。