Git 安装
- **Git下载地址:** `https://git-scm.com/downloads`
- **Git安装(Window/Mac):** 选择不同系统安装包安装
- **检验是否安装成功:** 出现`Git Bash`命令行工具或`Git GUI`工具或`git --version`查看`git`安装版本
Git 结构
- **工作区(Working Directory)**
- **版本库(repository):** 暂存区(`stage/index`)和`master`(head唯一指向)
Git文件的4种状态
- **Untracked(未被跟踪的):** 此文件在文件夹中,但并没有加入到`git`库, 不参与版本控制. 通过`git add`状态变为`Staged`.
- **Unmodify(文件已经入库):** 文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致.这种类型的文件有两种去处,如果它被修改,而变为`Modified`.如果使用`git rm`移出版本库,则成为`Untracked`文件.
- **Modified(文件已修改):** 文件已修改,仅仅是修改,并没有进行其他的操作.这个文件也有两个去处,通过`git add`可进入暂存`staged`状态,使用`git checkout`则丢弃修改过, 返回到`unmodify`状态,这个`git checkout`即从库中取出文件,覆盖当前修改.
- **Staged(暂存状态):** 执行`git commit`则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为`Unmodify`状态.执行`git reset HEAD filename`取消暂存,文件状态为`Modified`.
Git基本命令
git init
初始化git
仓库并出现.git
文件夹
git add
- **`git add`:** 将文件添加到暂存区
- **`git add .`:** 将工作空间下所有文件添加到暂存区(new,modifyed)
- **`git add -A`:** 将工作空间下所有文件添加到暂存区(new,modifyed,delete)
- **`git add -u`:** 将工作空间下所有文件添加到暂存区(modifyed,delete)
git commit
- **`git commit -m `:** 将暂存区的文件提交到版本库
- **`git commit -am `:** 跳过`git add`命令,直接将工作区所有已跟踪的文件提交到版本库,未跟踪的(untracked)文件不能使用该命令
git status
- **`git status -s`:** 以精简的方式显示文件状态。
git log
- **`git log --oneline`:** 查看所有分支`commit`历史(oneline 一条提交信息用一行展示)
- **`git log --graph --oneline`:** 查看所有分支图形化的`commit`历史(oneline 一条提交信息用一行展示)
git config
- **git全局配置命令**
- `git config --global user.name zivszheng`:配置用户名
- `git config --global user.email zivs.zheng@gmail.com`:配置用户邮箱
- **查看配置** `git config --list`
git stash
- **`git stash`:** 暂存本地修改内容(不想提交修改的内容,想切换分支)
- **`git stash list`:** 查看暂存的历史记录
- **`git stash apple --index`:** 恢复之前暂存的某个记录
- **`git stash drop --index`:** 删除某个暂存记录
git rm
- 用于从工作区和索引中删除文件
- 常见使用:删除已经提价到远程仓库的`.idea`,`.seting`文件/文件夹(项目构建自动生成的)如:
- `git rm -r .idea`
- `git commit -m 'remove .idea'`
- `git push origin master`
Git diff
- **`git diff`:** 比较本地工作空间和`staged`区的差异
- **`git diff -- staged`:** 比较`staged`区和本地仓库中的差异
- **`git diff HEAD`:** 比较本地工作空间和本地仓库中的差异
Git 撤销操作
- **`git commit --amend`:** 撤销上一次提交将暂存区的文件重新提交(改写提交)
- **`git checkout --filename`:** 拉取暂存区的文件并将其替换工作区的文件,注意与`git checkout branchname`区别
- **`git reset HEAD --filename`:** 拉取最近一次提交到版本库中的文件到暂存区,该操作不影响工作区
- **`git reset --option 版本号`**
- `--hard`:硬回滚(不可逆的),即暂存区,工作区全部用指定提交版本的目录树替换掉
- `--mixed`:mixed或不使用参数,覆盖暂存区,但不覆盖工作区
- `--soft`:软回滚,不进行暂存区和工作区的覆盖
Git 分支
- **git 分支创建、修改、删除、切换:**
- `git branch`:查看分支
- `git branch `:创建分支
- `git branch -m `:修改分支名称
- `git checkout `:切换分支
- `git checkout -b `:创建并切换分支
- `git checkout -d `:删除分支
- **分支合并:**
- `git merge`:合并指定分支到当前分支(Fast forward)
- `git merge -no-ff -m `:合并指定分支到当前分支(-no-ff 参数表示禁用Fast forward)
- **查看分支来自哪一个分支:** `git reflog --date=local | grep `
Git远程仓库
- `git clone`:`git clone http://github.com/test.git`
- `git remote -v`:查看远程信息
- `git push`:`git push -u origin master`将本地上分支上推到
- `git pull`:
- `git pull origin dev:master`:获取远程的dev分支和本地的master分支合并
- `git pull origin dev`:获取远程的dev分支和当前分支合并,实际是先执行`git fetch`后再执行`git merge`
- `git fetch`:`git fetch origin dev`获取远程dev分支但不做合并
关联远程仓库
- `git remote add origin`
Git tag
- `git tag`:查看当前所有tag
- `git tag -a `:创建tag
- `git tag -a `:创建一个指向某一次提交的tag
- `git tag -a -m `
- `git show `:查看tag
Git Help
- `git help`
(完)