一、git 原理简单介绍
详细原理可参考廖雪峰的博客,其中,关于工作区、暂存区的理解非常关键,理解它对后面理解 git 的提交、回退动作非常有帮助。
工作区:通过 git add 添加的,参与状态跟踪的文件
暂存区:通过commit 提交的文件和版本
HEAD:git 通过commit ID 管理版本,通过HEAD “指针”管理当前版本的位置。commit之后,HEAD 会移动到下一个提交位置
(图片来源:图解Git)
二、常用语句整理
指令类型 | 指令 | 作用 |
---|---|---|
基本 | git clone github… | 从远程仓库拉取代码 |
git commit -m "msg" | 提交修改过的文件到commit 区域 | |
git status | 查看暂存区的文件 | |
git add -u | 提交工作区中有修改过的文件(非工作区中的文件不受影响,比如ignore文件) | |
git add -A | 将所有文件添加到工作区(非工作区中的文件不受影响) | |
git push origin master | 提交代码到远程分支 | |
git pull origin master | 拉取代码 | |
git stash | (pull冲突后)暂存本地和远程分支冲突的代码 | |
git stash list | 查看本地stash 的记录 | |
git stash show -p stash号 | 查看stash 文件内容 | |
git stash pop | (重新pull后)恢复stash 的文件内容 | |
git stash mergetool | 拉(stash pop 依然冲突后)使用merge 工具解决冲突(win: tortoisegit;mac: kdiff) | |
git stash drop | (解决代码冲突后)丢弃stash区的所有内容 | |
git fetch origin master:tmp | 拉取代码到本地的临时分支tmp | |
TAG | git checkout tags/tagname (--force) | 切换到指定tag |
git tag -a v1.0.0 -m "msg" commitID | 打tag | |
git push origin --tags | 提交所有tag | |
git tag -d tagName | 删除tag | |
git push origin --delete tagName | 提交删除tag 的操作 | |
查看 | git remote show origin | 查看项目地址 |
git show (commitID) | 查看最近一次提交的详细信息 | |
git log (HEAD) | 查看项目提交记录 | |
git diff -cached/staged (commitID) | 查看head和上次commit之间的差异 | |
git diff commitID..HEAD | 查看指定commit 和当前工作区代码的差异 | |
git branch (-r) | 查看本地(远程)的所有分支名称,以及HEAD所在分支 | |
git log -p -n | 查看最近n次的提交记录 | |
分支 | git checkout (-b) branchName | 本地创建/切换分支 |
git push origin branchName | 提交新分支 | |
请在页面操作,建议填上审批人、提交后删除原分支 | 提交分支合并请求(MR) | |
git branch -d branchName | 本地删除分支 | |
git merge master --no-ff --no-commit | 合并分支master--->develop,no fastforward(fastword 将不会创建merge commit,不建议 - #) | |
恢复 | git reset --soft HEAD~1 | 撤销commit(文件不回退) |
git reset --soft commitID | HEAD回退到指定版本(文件不回退,工作区、暂存区均不变) | |
git reset --soft origin/master | HEAD回退到远程分支版本 | |
git checkout commit_branch filename | 回退未commit文件到上一次提交版本 | |
git checkout HEAD~0/commitID filename | 回退指定文件到指定版本 | |
git reset --hard commitID/tagName | 【注意】所有代码回退到指定版本,HEAD(丢失commit) | |
git revert commitID | 【注意】所有代码回退到指定版本,HEAD向后移动(把回退动作当作commit并提交) | |
清理 | git reset HEAD pathOfFile | 将文件从工作区移除。不过还是建议通过.gitignore 实现 |