Git是什么?
Git是一款分布式版本控制系统
工作流程/原理
- Workspace: 工作区
改动(增删文件和内容)
- Index / Stage: 暂存区
输入命令:git add 改动的文件名,此次修改就放入暂存区
- Repository: 仓库区/本地仓库
输入命令:git commit 此次修改的描述,此次改动就放到了本地仓库,每个commit,可以称作为一个
版本
- Remote: 远程仓库
输入命令git push 远程仓库,此次改动就放到了远程仓库
Git与SVN的主要区别
- Git是分布式版本控制系统,SVN是集中式版本控制系统
- Git没有中央服务器,每个人的电脑都是一个完整的版本库;SVN版本库集中放在中央仓库,每个人需要从仓库拉取最新代码之后进行工作。集中式版本控制系统是必须联网才能工作
git常用命令
展示帮助信息
git help -g
复制代码
回到远程仓库状态
摒弃本地所有修改,回到远程仓库状态。
- 第一步
git fetch --all
复制代码
- 第二步
git feset --hard origin/master
复制代码
重设第一个commit
也就是把所有改动都重新放入工作区,并
清空所有commit
,这样就可以重新提交第一个commit
git update-ref -d HEAD
复制代码
查看冲突文件
展示所有工作区的冲突文件列表
git diff --name-only --diff-filter=U
复制代码
展示工作区与暂存区的不同
输出工作区和暂存区不同
git diff
复制代码
展示本地仓库任意两个commit之间的文件变动
git diff <commit -id> <commit -id>
复制代码
展示暂存区、工作区和最近版本的不同
输出工作区、暂存区 和本地近的版本 (commit) 的 different (不同)。
git diff HEAD
复制代码
快速切换到上一个分支
git checkout -
复制代码
删除已经合并到master的分支
windows电脑不可用
git branch --merged |grep -v `^\*\| master` | xargs -n 1 git branch -d
复制代码
展示本地分支关联远程仓库的情况
git branch -vv
复制代码
关联远程分支
git branch -u origin/mybranch
复制代码
或者在push时加上-u
参数
git push origin/mybranch -u
复制代码
列出所有分支
git branch -r
复制代码
列出本地和远程分支
git branch -a
复制代码
查看远程分支和本地分支的对应关系
git remote show origin
复制代码
远程删除分支,本地也想删除
git remote prune origin
复制代码
创建并切换到本地分支
一般是从master上创建
git checkout -b <branch-name>
复制代码
从远程分支中创建并切换到本地分支
git checkout -b <branch-name> origin/<branch-name>
复制代码
删除本地分支
git branch -d <local-branch-name>
复制代码
删除远程分支
git push origin --delete <remote-branch-name>
复制代码
或者
git push origin :<remote-branch-name>
复制代码
重新命名本地分支
git branch -m <new-branch-name>
复制代码
查看标签
git tag
复制代码
展示当前分支的最近的tag
git describe --tags --abbrev=0
复制代码
查看标签详细信息
git tag -ln
复制代码
本地创建标签
git tag <version-number>
复制代码
默认tag是打在最近的一次commit上,如果需要指定commit打tag:
git tag -a <version-number> -m "v1.0 发布(描述)" <commit-id>
复制代码
推送标签到远程仓库
git push origin <local-version-number>
复制代码
一次性推送所有标签,同步到远程仓库
git push origin --tags
复制代码
删除本地tag
git tag -d <tag-name>
复制代码
删除远程tag
git push origin --delete tag <tag-name>
复制代码
切回到某个标签
一般用于线上出问题时候回归
git checkout -b <branch_name> <tag_name>
复制代码
放弃工作区修改
git checkout <file-name>
复制代码
放弃工作区所有修改
git checkout .
复制代码
回到某个 commit 的状态,并删除后面的 commit
与
revert
的区别:reset
命令会抹去某个 commit id 之后的所有 commit
#默认就是-mixed参数。
git reset <commit-id>
#回退至上个版本,它将重置HEAD到另外一个commit,并且重置暂存区以便 和HEAD相匹配,但是也到此为止。工作区不会被更改。
git reset --mixed HEAD^
#回退至三个版本之前,只回退了commit的信息,暂存区和工作区与回退之 前保持一致。如果还要提交,直接commit即可
git reset --soft HEAD~3
#彻底回退到指定commit-id的状态,暂存区和工作区也会变为指定 commit-id版本的内容
git reset --hard <commit-id>
复制代码
显示本地更新过 HEAD 的 git 命令记录
每次更新了 HEAD 的 git 命令比如 commit、amend、cherry-pick、reset、revert 等都会被记录下来 (不限分支),就像 shell 的 history 一样。 这样你可以 reset 到任何一次更新了 HEAD 的操作之后,而不仅仅是回到当前分支下的某个 commit 之 后的状态
git reflog
复制代码
给git命令起别名
git config --global alias.<handle> <command>
复制代码
例如:
将git status改成git ss
git config --global alias.ss status
复制代码
存储当前修改,但不用提交commit
git stash
复制代码
保存当前文件,包括新建的文件
git stash -u
复制代码
展示所有stashes
git stash list
复制代码
回到某个stash的状态
git stash apply <stash@{n}
复制代码
回到后一个 stash 的状态,并删除这个 stash
git stash pop
复制代码
删除所有的 stash
git stash clear
复制代码
展示所有的tracked文件
可提交的文件
git ls-files -t
复制代码
展示所有的untracked文件
不提交
git ls-files --others
复制代码
展示所有忽略的文件
git ls-files --others -i --exclude-standard
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END