- Svn等版本管理体系,管理的是文件,而git管理的是变化
- SVN是集中式的,Git是分布式的,每个用户都有一个离线仓库,用来存储多次提交
- 一个个commit,会串成一条线,类似时间轴;时间轴上每个节点就是一个commit,对应于当前所有文件的状态
总结一下git的常用操作指令
初始化
git config --global user.name "xxx" # 配置用户名
git config --global user.email "xxx@xxx.com" # 配置邮件
git config --list # 查看配置
git remote # 列出已经存在的远程仓库
git remote -v # 列出远程仓库的详细信息及出URL地址(verbose)
git remote add origin <远程仓库的URL地址> # 添加远程仓库
git remote set-url origin <远程仓库的URL地址> # 将远程的 URL 从 HTTPS 更改为 SSH
切换分支
git checkout 是 git 最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区。
git branch # 显示本地分支
git branch -a # 显示所有分支(all)
git branch -d # 删除分支(delete)
git branch -m master master_copy # 本地分支改名(modify)
git checkout -b master_copy # 创建新分支master_copy并切换(born)
git checkout -b devel origin/develop # 从远程分支develop创建新本地分支devel并切换
常用操作
工作区<---->暂存区
git add将文件添加到暂存区/index/索引
git add xyz # 添加xyz文件至index
git add . # 增加当前子目录下所有更改过的文件至index
git status # 查看当前版本状态(是否修改)
git diff # 显示所有未添加至index的变更
git diff --cached # 显示所有已添加index但还未commit的变更
清空工作、暂存区
git checkout . # 清空工作区中修改的文件(工作区中所有修改就没有了)
git reset # git add的逆向操作
git rm 将文件从暂存区删除
git rm xxx # 删除index中的文件
git rm -r * # 递归删除(全部删除了)
git rm --cached # 暂存区删除,工作区保留
暂存区区<---->本地仓库
git commit'将文件从暂存区删除
git commit -m 'xxx' # 提交(message)
git commit --amend -m 'xxx' # 修改上一次提交信息
git commit -am 'xxx' # 将add和commit合为一步(add)
git rebase -i # 合并commit(interactive)
git log # 查看当前版本提交状态
git show <commitid> # 可只用commitid的前几位
git show HEAD # 显示HEAD提交日志
git reset将文件从暂存区删除
reset只是将当前时间轴的HEAD指针重新设置到指定节点,并不影响当前所有文件的状态,所以reset既可以向前,又可以向后;在加上–hard才会强制在改变时间轴的同时,把所有当前的文件状态页回退到那个节点的状态
git reset --mixed # 撤销某次版本commit和add,回到工作区
git reset HEAD^ --soft # 保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区
git reset HEAD^ --hard # 表示没有commit的修改会被全部擦掉,并删除之前的所有commit提交
git revert <commitid> # 撤销提交
本地仓库<---->远程仓库
git push origin <master> # 将当前分支的最后一次commit push到远程master分支
git push origin :hotfixes/BJVEP933 # 删除远程仓库的hotfixes/BJVEP933分支
新的存储区不受分支影响
git stash将文件从暂存区删除,切换分支不受影响,依然可以取出,默认名称为最近一次commit
git stash # 暂存当前修改
git stash save <message> # 暂存当前修改并取名
git stash list # 查看所有暂存
git stash show # 查看所有暂存
git stash show -p stash@{0} # 查看第一次暂存
git pop将文件从暂存区取出
git stash pop # 取出暂存(栈顶)
git stash apply stash@{0} # 应用第一次暂存(注意“应用”!="取出")
git stash drop stash@{X} # 删除暂存
git stash clear # 清空暂存区
合并
合并操作:git pull = git fetch + git merge
git fetch <remote> # 从远程仓库获取代码
git merge <branch> # 合并指定分支到当前分支
git pull <remote> <branch> # 从远程仓库获取代码并合并
git rebase <branch> # 合并指定分支到当前分支,并删除之前的提交