Git 代码管理 (莫烦 Python Github 版本管理教程)
《极客Python之Git实用教程》(小甲鱼)
版本控制系统
初次使用前的配置
git config --global user.name "用户名"
git config --global user.email "邮箱"
查看配置
git config --list
基础知识
git每个版本都是独立保存。
working directory | stage(index) | repository(HEAD) | ||
---|---|---|---|---|
工作区 | add checkout | 暂存区 | commit reset | 仓库 |
工作流程:
- 在工作区添加、修改文件
- 将需要进行版本管理的文件放入暂存区
- 将暂存区的文件提交到仓库
三种状态:
- 已修改 modified
- 已暂存 staged
- 已提交 committed
本地管理
- 新建文件夹并进入
git init
初始化,将建立.git
隐藏文件夹- 新建并编辑文本文件,
git add 文件名
放入暂存区 git commit -m "更改信息"
提交到仓库--amend
更正最后一次提交
查看工作状态和历史提交
查看状态
git status
- 新建文件,在工作区,untracked
- add之后,进入暂存区,to be commited;
git reset HEAD [文件]
取消暂存(to unstage) - commit之后,进入仓库,nothing to commit, working directory clean
- 修改仓库文件(modified),回到工作区,未暂存,继续add和commit;
git checkout -- 文件
放弃修改 - 修改暂存区文件(modified),修改前文件依然在暂存区,待提交;修改后文件回到工作区,继续add和commit
查看历史提交
git log
--oneline
--graph
--all
git reflog
回到过去
git reset HEAD~
回到上一个版本
git reset HEAD~数字
回到多个版本以前
git reset HEAD~版本号
回到指定版本
--soft
移动HEAD指针,但不回滚到暂存区,相当于撤销上一次commit
[--mixed]
默认,移动HEAD指针,并回滚到暂存区
--hard
移动HEAD指针,并回滚到暂存区,同时将暂存区还原到工作区
git reset 版本号 文件/目录
回滚个别文件,但不会移动指针
git reset 版本号
回滚到之后
版本对比
git diff
当前工作区和暂存区
git diff 版本号
当前工作区和仓库版本
git diff HEAD
当前工作区和仓库最新版
git diff --cached [版本号]
暂存区和仓库版本
git diff 版本号1 版本号2
两个仓库版本
删除文件
git rm 文件
删除文件,只删除工作区和暂存区,也就是取消跟踪
git rm --cached 文件
只删除暂存区
git checkout -- 文件
撤销删除
重命名
git mv 旧文件名 新文件名
分支
git branch 分支名
创建分支
git checkout 分支名
切换分支,本质是指针指向新分支
git checkout -b 分支名
创建并切换分支
git merge 分支名
合并分支到当前分支。如果不同分支都有改动,要先解决冲突。
git branch -d 分支名
删除分支
git checkout 版本
匿名分支
checkout 和 reset
checkout:从历史版本或者暂存区拷贝到工作区;切换分支
reset:恢复文件时,没有soft或者hard。
reset将文件恢复到暂存区,而checkout同时覆盖暂存区和工作区。
checkout在切换分支前会检查是否clean,reset --hard直接覆盖。
reset移动HEAD所在分支的指向,checkout只移动HEAD自身。