新版Git合并了
checkout
和reset
原来的
git checkout
可以使用git restore
代替原来的
git reset HEAD
可以使用git restore --staged
代替最新版的git提示都已经更换成了
restore
文件提交
# 初始化本地仓库
git init
# 查看修改内容详情
git diff
# 查看当前git仓库文件状态,显示信息包括当前分支名称,与远程分支的关系(是否最新),未暂存的修改,未跟踪的文件(当前目录未纳入版本控制的新文件列表)
git status
# 使用简短的输出结果
git status -s
# 将当前目录下所有修改文件加入暂存区。不会处理未被跟踪的文件
git add .
# 将当前目录下所有修改文件加入暂存区,并且会对未被跟踪的文件进行处理添加到暂存区
git add -A/a/--all
# commit命令提交后会自动生成一个commit-id,如果没有任何参数将会打开默认的文本编辑器,要求提供提交信息
git commit
# 提交所有修改的快照,只会选择已添加到暂存区的文件,不会提交新创建的文件,该命令同样会要求提供提交信息
git commit -a
# 提供在命令行上写下提交信息
git commit -m ""
# 立即对暂存文件提交并给出提交信息
git commit -am ""
# 编辑最后一次提交的内容,要求提供修改后的内容
git commit -amend
# 将本地分支版本上传到远程分支
git push <远程主机名> <本地分支>:<远程分支>
# 如果只要一个分支的情况
git push
# 本地版本与远程版本存在差异又需要强制推送时
git push --force origin master
# 删除主机的分支
git push origin --delete master
# 查看远程仓库
git remote
# 查看远程仓库显示详细信息
git remote -v
# 删除远程仓库
git remote rm <name>
关联远程仓库
使用git commit
命令提交之后进行本地和远程代码仓库关联
# 远程仓库名称默认为origin
git remote add origin <github代码仓库的url地址>
提交代码到远程仓库
git push -u origin master
版本库管理
查看提交历史
git log
命令基本用法:
git log [选项] [分支名/提交哈希]
# 显示从最近到最远的提交日志
git log
# 显示提交的补丁(具体更改内容)
git log -p
# 以简洁的一行格式显示提交信息
git log --oneline
# 以图形化方式显示分支和合并历史
git log --graph
# 显示分支和标签指向的提交
git log --decorate
# 只显示特定作者的提交
git log --author=<作者>
# 只显示指定时间之后的提交
git log --since=<时间>
# 只显示指定时间之前的提交
git log --until=<时间>
# 只显示包含指定模式的提交消息
git log --grep=<模式>
# 不显示合并提交
git log --no-merges
# 显示简略统计信息,包括修改的文件和行数
git log --stat
# 使用短提交哈希值
git log --abbrev-commit
# 使用自定义的提交信息显示格式
git log --pretty=<格式> / git log --pretty=oneline # 以简洁的一行格式显示提交信息
版本回退和修改撤销
在进行版本回退时可以先查日志
# 回退到上个版本
git reset --soft HEAD^
# 回退到指定版本,查询日志找到对应的commit_id,版本号不需要写全,前几位即可
git reset --hard commit_id
# 如果不记得commit_id同时git log没有记录,可以使用命令记录的每一次命令
git reflog <分支>
# 丢弃工作区的修改,回到最近的一次commit或add时的状态
git checkout -- file<文件>
# 撤销add修改放回工作区
git reset HEAD file<文件>
# 撤销commit修改放回暂存区
git reset --soft HEAD^
删除文件
# 从git暂存区和工作区删除文件,同时将该文件删除操作添加到暂存区
git rm file<文件>
# 回复删除文件,根据提交的commit_id
git checkout commit_id file<文件>
分支管理
一般来说分支主要包含两大分支主分支和辅助分支,主分支包括master
,develop
,辅助分支(临时分支)有:
- 功能(feature)分支
- 预发布(release)分支
- 修补bug(fixbug)分支
正常情况下辅助分支使用结束后删除。
各分支介绍及命令
- 主分支
master
作为对外的使用的正式版本都在这个主分支上发布,一般作为git默认主分支
- 开发分支
develop
主分支只用于发布重大版本,日常开发应该在另一条分支上完成。通过在develop
上开发完毕后进行合并(merge)到master
分支操作
- 功能分支
feature
开发某个特定功能,开发完成后合并到develop
分支,命名规则参考:feature-*
- 预发布分支
release
发布正式版本之前(合并到master分支之前)的分支,预发布结束以后必须合并进develop
和master
分支,命名规则参考:release-*
- 修补bug分支
fixbug
作为修复bug分支,修复结束后再合并到master
和develop
分支上,命名规则:fixbug-*
查看分支
# 查看本地分支
git branch
# 查看远程版本库的分支列表
git branch -r
# 查看所有分支列表(包括本地和远程,remotes/开头的表示远程分支)
git branch -a
# 查看一个分支的最后一次提交
git branch -v
# 查看哪些分支已经合并到当前分支
git branch --merged
# 查看所有未合并工作的分支
git branch --no-merged
# 合并到当前分支未提交时可以执行命令取消合并
git merge --abort
创建分支
-b
表示用于指定新分支的名称,在创建新分支的同时将其设置为当前分支。
git checkout -b develop master
# 如果单纯的创建分支可以使用下面命令
git branch develop
# 切换分支
git checkout develop
更新分支
在更新分支前需要确保本地仓库和远程仓库中的分支是同步的。可以通过执行下面命令实现,这个命令会从远程仓库中获取最新分支信息
git fetch origin
# 在本地分支中合并远程分支
git merge origin/(分支名称)
# 更新指定分支
git fetch origin 分支名称:本地分支名称
# 更新所有分支
git pull -all
合并分支
默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将master
分支指向develop
分支。使用--no-ff
参数后,会执行正常合并,在master
分支上生成一个新节点,保留更详细的分支历史。
在开发分支上进行文件提交操作,按照需要选择是否推送,执行完commit
命令后就可以执行合并操作:
git merge --no-ff develop
删除分支
# 根据分支名称删除本地分支
git branch -d <分支名称>
# 修改本地分支名称
git checkout -b <要修改的本地分支名称>
# 删除远程分支
git push <远程仓库名称> --delete <远程分支名称>
# 删除远程分支并重新命名
git push <远程仓库名称> --delete <远程分支名称>:<新命名分支名称>
rebase操作
作用:把分叉的提交历史"整理"成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了
目的:使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
# 输入命令
git rebase
# 再输入
git log
标签操作
# 创建标签
git tag <标签名称>
# 列出所有标签
git tag
# 创建一个带注释的标签
git tag -a <标签名称> -m ""
# 查看标签信息
git show <标签名称>
# 把标签推送到远程仓库
git push origin <标签名称>
# 推送所有标签到远程仓库
git push --tags
# 删除本地标签
git tag -d <标签名称>
# 删除远程标签
git push origin :<标签名称>
扩展
.gitignore
配置文件
以#
开头的是注释,以/结尾的是目录,以 /
开头防止递归,以 !
开头表示取反
- 使用 glob 模式进行文件和文件夹的匹配
- 星号
*
匹配零个或多个任意字符 - [abc] 匹配任何一个列在方括号中的字符
- 问号
?
只匹配一个任意字符 - 在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配 [0-9]
- 两个星号
**
表示匹配任意中间目录(a/**/z
可以匹配a/z目录、a/b/z
或a/b/c/z
等目录)
个人博客已上线,欢迎来访~
传送门:夜雨炊烟