既然讲到 git 先谈谈 git 和 github 的关系吧!
什么是 git ?
- Git — The stupid content tracker, 傻瓜内容跟踪器。Linus Torvalds 是这样给我们介绍 Git 的。
- Git 是 global information tracker 全球信息追踪器的英文缩写。
- Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
- Git 是一种专为处理文本文件而设计的版本控制系统。归根到底,这就是代码的本质:一堆堆以某种方式联合在一起的文本文件。Git 是一个可安装应用,它允许你对你自己所做的更改进行注释,用以创建易于导航的系统历史。
- Git 是用于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持
- Git 是软件,它可在本地建立仓库,你写的代码的各个版本都可以存着。
版本控制(Version control):顾名思义,版本控制系统是任何能让你了解到一个文件的历史,以及它的发展过程的系统。
什么是 github ?
- gitHub 是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名 gitHub。
- github 是网上仓库,你写的代码的各个版本都可以存着。
- github 就是让你把工作(通过Git提交进行注解)存储在了一个指定的在线文件夹(repo)。
- GitHub可以托管各种git库,并提供一个web界面,但与其它像 SourceForge 或 Google Code 这样的服务不同,GitHub 的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。
git命令总结
- 创建:
- 在本地克隆一个已创建的仓库:
$git@gitee.com:Seul0725/learnNotes.git
- 创建一个新的本地仓库:
$git init
- 本地修改:
- 显示工作路径下已修改的文件:
$git status
- 显示与上次提交版本文件的不同:
$git diff <file>
- 把当前所以修改添加到下次提交中:
$git add
- 把对某文件的修改添加到下次提交中(实现暂存文件的部分改动):
$git add -p <file>
- 提交本地所以的修改:
$git commit -a
- 附加消息提交:
$git commit -m 'message here'
- 当前分支中未提交的修改移动到其他分支:
$git stash
- 查看stash的内容:
$git stash list
- 恢复stash中的内容但不删除其内容:
$git stash apply stash@{0}
- 恢复stash中的内容同时把stash中的内容删除:
$git stash pop
- 搜索:
- 在当前目录中的所有文件中查找文本内容:
$git grep "Hello"
- 在某一版本中搜索文本:
$git grep "Hello" v1.0
- 提交历史:
- 从最新的提交开始,显示所有的提交记录(仅显示提交的hash和message):
$git log --oneline
,是–pretty=oneline --abbrev-commit 的简化用法。 - 显示完整的commit id:
$git log --pretty=oneline
- 显示分支合并图:
$git log --graph
- 显示SHA-1前几个字符,而非所有的40个字符:
$git log --abbrev-commit
- 显示某个用户的提交:
$git log --author="username"
- 显示某个文件的所以修改:
$git log -p <file>
- 查看命令历史:
$git reflog
- 查看谁在什么时间修改了文件的内容:
$git blame <file>
- 分支与标签:
- 列出所有分支:
$git branch
- 基于当前分支创建新分支:
$git branch <new-branch>
- 删除本地分支:
$git branch -d <branch>
- 查看本地分支和远程分支的关系:
$git branch -vv
- 将本地分支追踪远程分支:
$git branch --set-upstream branch-name origin/branch-name
- 设置当前分支跟踪远程分支:
$git branch -u origin/branch-name
- 基于远程分支创建新的可追踪分支:
$git branch --track <new-branch> <remote-branch>
,与NO.10类似。 - 切换分支:
$git checkout <branch-name>
- 创建并切换到新分支:
$git checkout -b <branch-name>
- 在远程分支的基础上建立dev分支,并且让dev分支追踪origin/dev远程分支:
$git checkout -b dev origin/dev
,与No.7类似 - 在当前分支打标签,默认是HEAD:
$git tag <tag-name>
- 查看所有标签:
$git tag
- 对某次commit打标签:
$git tag <tag-name> <commit-id>
- 查看标签信息:
$git show <tag-name>
- 创建带有说明的标签:
$git tag -a <tag-name> -m "message" <commit-id>
- 删除一个本地标签:
$git tag -d <tag-name>
- 删除一个远程标签:
$git push origin :refs/tags/<tag-name>
- 推送一个本地标签:
$git push origin <tag-name>
- 推送全部未推送过的本地标签:
$git push origin --tags
- 更新与发布:
- 查看远程库信息:
$git remote
- 列出当前可抓取和推送地址的远程端:
$git remote -v
- 显示远程端信息:
$git remote show <remote>
- 删除本地远程端:
$git remote rm <remote>
- 添加新的远程端:
$git remote add <remote> <url>
- 下载远程端版本,但并不合并到HEAD中:
$git fetch <remote>
- 下载远程端版本,并自动与HEAD版本合并:
$git remote pull <remote> <url>
- 将远程端版本合并到本地版本中:
$git pull origin master
- 推送分支到到远程端:
$git push <remote> <branch>
- 删除远程端分支:
$git push remote --delete <branch>
- 合并和重置:
- 将分支合并到当前HEAD中:
$git merge <branch>
- 将本地未push的分叉提交历史整理出直线:
$git rebase
- 退出重置:
$git rebase --abort
- 撤销:
- 放弃工作目录中所有修改:
$git reset --hard HAED
- 移除缓存区的所有文件(撤销上次的git add):
$git reset HEAD
- 放弃某个文件的所以本地修改:
$git checkout HEAD <file>
- 重置一个提交(本地修改的内容也会被重置):
$git revert <commit-id>
- 将HEAD重置到指定的版本,并抛弃该版本之后的所有修改:
$git reset --hard <commit-id>
- 将HEAD重置到上一次提交的版本,并将之后的修改标记为未添加到缓存区的修改:
$git reset <commit-id>
- 将HEAD重置到上一次提交的版本,并保留未提交的本地修改:
$git reset --keep <commit>