最近用git结果傻了,不小心把东西给删了,一边抱怨自己的傻,脑子不够用,一边觉得是自己真心基本命令不熟,本来的版本管理现在只知道个push和pull,出了问题就不知道怎么对付,心疼自己,顺便出一份指南,省的之后忘了这个怎么用。
Git 简介
Git,简而言之就是一个世界上最先进的分布式版本控制系统。CVS和SVN都是集中式的版本控制系统,版本都是存放在中央服务器中的,如果不能联网的话,就没有正确的代码。而分布式的系统中,每个人的电脑中都是一个完整的版本库。
Git原理
Git 获取仓库
git init
: 创建Git可以管理的仓库,当前目录下会多一个.git
文件夹。
git clone /path/to/repo
: 检出仓库。
git clone username@host:/path/to/repo
: 从远程服务器中检出仓库。
Git 日常操作
git add file
: 计划改动,将文件提交到缓冲区中, 将对文件的修改提交到暂存区。合并遇到冲突时候,使用这个命令进行将文件标记为合并成功。
git commit -m "message"
: 提交改动,将改动从缓冲区提交到HEAD
,但是不是远程仓库。
git status
: 查看仓库当前状态。
git diff <filename>
: 查看当前对文件的修改内容(未提交到缓冲区)。
git log
: 获取当前提交ID。显示从最近到最远的提交日志。--pretty=oneline
参数可以简化输出。--graph
可以查看分支合并图。
Git 时光穿梭
git reset --hard HEAD^
: HEAD
表示最新版本,HEAD~100
表示之前100个版本,HEAD^
表示上一个版本,选择回退到那个版本。
git reflog
: 记录每一次的git
命令,选择去未来的那个版本。
git checkout -- <filename>
: 将工作区的修改撤销,恢复到缓冲区或者是版本库。
git reset HEAD <filename>
: 将暂存区的修改撤销,重新放回工作区。
rm <filename> && git rm <filename>
:删除文件。
Git 远程仓库
git remote -v
: 显示远程仓库,
git remote add origin <server>
: 将仓库连接到某个远程服务器。
git push origin <master>
: 将改动提交到了远程仓库中,可以切换为想要推送的不同分支。 (可以使用-u
参数对于本地仓库和远程仓库进行关联)
git pull
: 将工作目录的代码获取并合并远程的改动。
git push
出现冲突的时候:需要先git pull
把最新的提交从分支中扒下来,然后在本地合并,解决冲突,在推送。
git branch --set-upstream-to=origin/dev dev
: 将本地特定分支和远程dev
分支进行绑定。
git rebase
: 将分叉的提交历史变成一条直线
Git 分支管理
git branch
: 查看当前分支。
git checkout -b feature_x
: 新建一个叫做feature_x
的分支,并且切换过去。
git branch feature_x && git checkout feature_x
git checkout master
: 切换到主分支。
git branch -d feature_x
: 删除新建的分支。
git branch -D feature_x
: 强制删除未合并分支。
git merge <branch>
: 合并其他分支到当前分支, 使用--no-ff
参数来 禁用Fast Forward
模式并追加-m commit
添加Commit。
git diff <source_branch> <feature_branch>
: 进行两个分支的比较。
git stach
: 将当前工作现场保存下来,等之后恢复现场后可以继续工作。
git stash list
: 将工作现场列表显示出来。
git stash pop
= git stash apply && git stash pop
: 处理之前的工作现场。
Git 标签管理
Git 的标签就是一个和commit 挂钩,并且有意义的名字。
git tag
: 查看所有标签。
git tag -a <1.0.0> <commit_id> -m <comment>
: 给某次提交打标签。
git tag -d v0.1
: 删除本地标签。
git push origin <tagname>
: 将标签提交到远程。
git push origin --tags
: 将全部标签提交到远程。
git push origin:refs/tags/<tagname>
: 删除远程标签
git show <tagname>
: 查看标签信息。
git fetch origin && git reset --hard origin/master
: 放弃当前修改,从服务器上获取最新修改,并将本地分支指向它。
Git 其他
.gitignore
文件