Git 实用指南

最近用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文件

Reference