git 原理介绍及绝大部分命令
平常开发sourceTree 够用了,下面命令了解下也是好的,当然你要是喜欢敲命令,比如我,那就得留意一下了 **git log **
//最关键的
git log --help (如果不懂有什么命令可以通过它查询)
//完整输出
git log
//限定一行
git log --oneline
# 查看最近几个commit记录带上 - + 数字
git log --oneline -1
git status
git status --help (如果不懂有什么命令可以通过它查询)
//查看工作区及索引区的变动
git status
//概要信息
git status -s
# 查询工作区中是否有stash存在(暂存的东西),有则提醒该工作区有几个 stash
git status --show-stash
#查询当前分支状态
git status -b
git branch
//帮助查找其他命令
git branch --help
//创建分支
git branch Dev
//列出所有分支
git branch -a
//删除分支
git branch -d Dev
//重命名
git branch -M oldDev new Dev
//指定它的当前分支的上游分支,两个写法一致的
git branch --set-upstream-to origin Dev
//取消关联
git branch --unset-upstream-to origin Dev
git checkout
//查看其他命令
git checkout --help
//切换本地分支
git checkout Dev
//切换远程分支
git checkout origin/Dev
// 基于远程分支创建本地分支(前提有远程分支)
git checkout --track origin/develop
// 创建并切换到新分支
git checkout -b Dev
//彻底丢弃某个文件的改动
git checkout -- file
//放弃本地所有改动
git checkout
//切换上一个分支
git checkout -
git stash
//查看其他命令
git stash --help
//保存
git stash push -m "更改了 xx"
//查看所有缓存记录
git stash list
//取缓存,保留记录
git stash apply stash@{0}
//取缓存,删除记录
git stash pop stash@{0}
//清空所有缓存(使用前,请慎重)
git stash clear
//清除指定缓存
git stash drop stash@{0}
//查看缓存变动
git stash show stash@{0}
git commit
//查看其他帮助命令
git commit --help
// 跳过校验直接提交,包括任何 githooks
git commit --no-verify -m "xxx"
//新修改的内容,添加到上次提交中,减少提交的日志
git commit --amend --no-edit
//最常用的
git commit -m"xxx"
//彻底丢弃某个文件的改动
git checkout -- file
//放弃本地所有改动
git checkout .
//切换上一个分支
git checkout -
git reset
//查看其他帮助命令
git reset --help
//直接回滚,抛弃回滚之前commit的改动:就是改变HEAD的指向,修改的内容抛弃
//c01a2c6 为git log 的哈希值
git reset --hard c01a2c6
//软性回滚,保留回滚之前的commit变动: 就是改变HEAD的指向,修改的内容依然在
git reset --soft c01a2c6
# 软回滚一个版本,可以理解为撤销最近一次的 commit
git reset --soft HEAD~1
# 清除暂存区但保留工作区变动
git reset --mixed c01a2c6
# 保留工作区和暂存区之间的差异。
git reset --merge c01a2c6
# 保留工作区和HEAD之间的差异
git reset --keep c01a2c6
git revert
一般用于master 的代码回滚,因为多人在上面协作,
revert 可以平稳的回滚代码,但却保留提交记录,不会让协作的人各种冲突!
//查看其他帮助命令
git revert --help
//回滚到某个 commit
git revert commit-sha1
git rebase
//查看其他帮助命令
git rebase --help
1.本地与远端同一分支提交历史不一致,解决分叉问题
git rebase
2.以master为基础,将feature分支上的修改增加到master分支上,并生成新的版本
git rebase master
git merge
// --ff 是指fast-forward命令,当使用ff模式进行合并时,将不会创造一个新的commit节点。
// --no-ff,保留合并分支的提交记录,一般主干用的比较多.
//--ff-only 除非当前HEAD节点为最新节点或者能够用ff模式进行合并,否则拒绝合并并返回一个失败状态。
// --squash 则类似 rebase squash,可以把合并多个 commit 变成一个
git merge --no-ff develop
//也可以忽略
git merge develop
git push
//直接新建一个同名的远程分支
git push origin master
// 推送所有标签
git push --tags
//推送 commit 关联的 tags
git push --follow-tags
//强制推送本地仓库到远程(比如我们变基后远程和binding不一致,这时我们可以通过强制推送同步代码)
git push -f origin master
//--force-with-lease: 若是远程有人提交,此次强推失败,反之成功
git push --force-with-lease
//删除远程仓库
git push -d origin develp
git remote
// 常规关联本地 git init 到远程仓库的姿势
git remote add origin url
// 新增其他上游仓
git remote add github url
//删除
git remote remove github url
//修改推送源
git remote set-url origin(或者其他上游域) url
git reflog
这个命令的强大之处,是记录了所有行为,包括你 rebase,merge, reset 这些当我们不小心硬回滚的时侯,或变基错了都可以在这里找到行为之前的commit,然后回滚。当然这个时间回溯也只在本地有用,你推送到远程分支的破坏性改动,该凉还是得凉。
# 最近n次行为,不带-n 则默认所有
git reflog -n
git rev-parse
写脚本必备命令
// 获取最新有效的commit
// --short:显示七位的 sha1,不带就是全部
//--verify: 校验是否有效commit
// HEAD: 当前分支的head 指向
git rev-parse --short HEAD --verify
// 显示仓库的绝对路径
git rev-parse --show-toplevel
// 显示版本库.git 目录所在的位置
git rev-parse --git-dir
// 显示所有关联引用的 git sha1
git rev-parse --all
git rm
重新索引.gitignore 的范围
//删除某个文件的索引,不会删除硬盘中的文件
git rm --cache -- file
//递归清除全部缓存,重新让.gitignore 新范围生效
git rm -r --cached .
git add .
git commit -m "xxx"
git cherry-pick
从多个分支同时挑取部分需要的 commit 合并到同一个地方去
//在当前分支挑其他分支的 commit,把那部分的变动那过来
git cherry-pick commit-sha1
//支持一次性拿多个
git cherry-pick master~4 master~2
// 支持区间, 区间中间是 ..
git cherry-pick startGitSha1..endGitSha1
git init
//初始化的版本库,用于记录版本库历史记录的.git目录下面的文件;而不会包含实际项目源文件的拷贝
//不允许用户在上面进行各种git操作,多用于远程
git init --bare
//初始化仓库,包含全部,能执行各种git仓库,多用于本地
git init
git pull
//更新代码:会将本地的代码更新至远程仓库里面最新的代码版本
// 相当于git fetch+git merge
git pull
//指定分支
git pull origin master
//解决分叉问题
git pull rebase
git fetch
//更新代码 与git pull的区别: 更改远端跟踪分支只能用git fetch
//相当于fetch的时候本地的master没有变化,但是与远程仓关联的那个版本号被更新了
git fetch
git tag
//列出已有的tag
git tag
//新建tag
git tag 0.1
//创建时添加备注
git tag -a tagName -m "my tag"
// 查看tag信息
git show tagName
//切换tag
git checkout 0.1
//删除tag
git tag -d 0.1
//推送tag到远程
单个
git push origin 0.1
//所有的
git push oriign --tags
//推送 commit 关联的 tags
git push --follow-tags
//远程删除
git push origin :refs/tags/0.1