git使用指南

149 阅读3分钟
  • 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'                                      # 将addcommit合为一步(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>                                       # 合并指定分支到当前分支,并删除之前的提交