Git 是一个开源的分布式版本控制系统,学会使用它可以高效地处理大小代码项目。
基本概念
工作流程: 工作区、暂存区、版本库
工作区:电脑里能看到的目录 暂存区:放在.git/index 版本库:工作区的隐藏目录.git master分支代表的目录 index是暂存区 HEAD是一个指向master的“指针标” objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。 git reset HEAD会使暂存区内容被HEAD指向的master目录内容替换,但工作区不影响 git rm从暂存区删除,但工作区不改变 git checkout . 或者指定文件,用暂存区文件替换工作区,意味这会清楚工作区未添加到暂存区的改动
创建仓库
- 初始化一个Git仓库,在目录下生成一个.git目录
git init //当前目录初始化Git仓库
git init <tartgetDir> //指定目录下作为Git仓库
git clone <repoURL>
git clone <repoURL> <tartgetDir> //克隆到指定的目录
例:
git clone git://github.com/schacon/grit.git testLib
基本操作
git status
git diff
git diff --cached // 查看已缓存的改动
git diff HEAD //查看已缓存的与未缓存的所有改动:
git add
git add . //全部放入暂存区
git add <filename> //放入一个指定文件到暂存区
git commit
git commit -m “describe of change”
git log
git show <commitHashCode>
git push
git push origin
- 更新远端的服务器本地代码,用于从远程获取代码并合并本地的版本。
(git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写)
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull
git pull origin develop //远端develop分支与当前分支合并
git pull origin develop:<branchB> //origin主机的develop与本地的branchB分支合并
分支管理
git branch
git branch -a //显示本地与远程
git branch -r //远程
git branch <branchName>
git checkout <branchName> //切换到一个分支
git checkout -b <branchName> //创建新分支并切换
git branch -d(D) <branchName> //删除分支,删除前要先切换到其他分支
git branch -m <oldName> <newName> //修改分支名
git push origin :<branchName> //删除远程的这个分支
常用手段
- 当更新代码时候,本地更改与上游没冲突时,简单的git pull就行了。但是,有些情况下,本地与上游相冲突,git pull会拒绝覆盖更改。 在这种情况下,可以将更改隐藏起来,执行git pull,然后解压 像栈一样
git stash
git stash & git pull & git stash pop
git stash clear
git cherry-pick commitId
- 撤销修改工作区
git checkout -- fileName
一种是 文件修改后还没有被放到暂存区,撤销修改就回到和版本库一模一样的状态。 一种是 文件已经添加到暂存区后又作了修改,撤销修改就是回到暂存区中该文件的状态。
- 暂存区的修改放回工作区
git reset HEAD fileName //撤销掉unstage,重新放回工作区,再按1步骤撤销 git reset --hard HEAD^ //已经提交了不合适的修改到版本库时,想要读档上一个commit版本 git reset --hard commit_id //回到指定的commit版本
git命令缩写
使用缩写git命令可以大大提升效率,比如最常用gst 不需要打全拼 git status .gitconfig中修改alias自定义 使用命令设置缩写
git config --global alias.br branch //branch的简写就是br
安装oh-my-zsh自带简写摘选部分如下
alias g='git'
alias ga='git add'
alias gco='git checkout'
alias gcb='git checkout -b'
alias gcd='git checkout develop'
alias gcmsg='git commit -m'
alias gcp='git cherry-pick'
alias gd='git diff'
alias gdca='git diff --cached'
alias gf='git fetch'
alias gl='git pull'
alias gm='git merge'
alias gp='git push'
alias gpf!='git push --force'
alias gr='git remote'
alias gra='git remote add'
alias grev='git revert'
alias grh='git reset'
alias grhh='git reset --hard'
alias gsh='git show'
alias gst='git status'
alias gstc='git stash clear'
alias gstd='git stash drop'
alias gstp='git stash pop'
|