Git 是一个分布式的版本控制系统,用作 Linux 内核代码的管理,Git 同样可以作为部署工具所使用。GitHub 的独特在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。Git 也是我们较常用的版本控制服务。
下面是常用的一些 git 命令
- 进行 git 初始化建立
在本地新建一个 repo,进入一个项目目录,执行 git init,会初始化一个 repo,并在当前文件夹下创建一个.git 文件夹.
git init
- 获取一个 url 对应的远程 Git repo, 创建一个 local copy.一般的格式是 git clone [url].clone 下来的 repo 会以 url 最后一个斜线后面的名称命名,创建一个文件夹,如果想要指定特定的名称,可以 git clone [url] newname 指定.
git clone
- 查询 repo 的状态.
git status
git status -s
-s表示short, -s的输出标记会有两列,第一列是对staging区域而言,第二列是对working目录而言.
- show commit history of a branch.
git log –oneline –number // 每条log只显示一行,显示number条.
git log –oneline –graph // 可以图形化地表示出分支合并历史.
git log branchname // 可以显示特定分支的log.
git log –oneline branch1 ^branch2 // 可以查看在分支1,却不在分支2中的提交.^表示排除这个分支(Window下可能要给^branch2加上引号).
git log –decorate // 会显示出tag信息.
git log –author=[author name] // 可以指定作者的提交历史.
git log –since –before –until –after // 根据提交时间筛选log.
git log –grep // 根据commit信息过滤log: git log –grep=keywords
- 在提交之前,Git 有一个暂存区(staging area),可以放入新添加的文件或者加入新的改动. commit 时提交的改动是上一次加入到 staging area 中的改动,而不是我们 disk 上的改动.git add 会递归地添加当前工作目录中的所有文件.
git add
- 比较工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容
git diff
- 若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用:
git diff -cached
- 可以用来比较两个分支.
git diff [branchA] [branchB]
- 提交已经被 add 进来的改动.
git commit -m ' '
- 先把所有已经 track 的文件的改动 add 进来,然后提交
git commit -a
- 增补提交. 会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消
git commit –amend
- 讲代码回归到当前分支最末梢最新的一个提交版本
git reset HEAD: unstage files from index and reset pointer to HEAD
- 可以单独针对某一个文件操作
git reset HEAD –– filename
- 撤销最近的一个提交
git revert HEAD
- 从 staging 区移除文件,同时也移除出工作目录
git rm file
- 从 staging 区移除文件,但留在工作目录中
git rm –cached
- 是从工作目录中移除没有 track 的文件
git clean -df
-d表示同时移除目录,-f表示force,因为在git的配置文件中, clean.requireForce=true,如果不加-f,clean将会拒绝执行.
- 把当前的改动压入一个栈
git stash
- 显示这个栈的 list
git stash list
- 取出 stash 中的上一个项目(stash@{0}),并且应用于当前的工作目录
git stash apply
- 也可以指定别的项目
git stash apply stash@{1}
- 如果你在应用 stash 中项目的同时想要删除它,可以用
git stash pop
- 删除所有项目
git stash clear
- 列出本地所有分支,当前分支会被星号标示出
git branch
- 创建一个新的分支
git branch (branchname)
- 删除一个分支.
git branch -d (branchname)
- 切换到一个分支
git checkout (branchname)
- 创建并切换到新的分支
git checkout -b (branchname)
- 把一个分支 merge 进当前的分支
git merge [alias]/[branch]
如果出现冲突,需要手动修改,可以用git mergetool. 解决冲突的时候可以用到git diff,解决完之后用git add添加,即表示冲突已经被resolved.
- 基于当前节点创建 tag
git tag v1.0
- 列出所有远程分支
git remote
- 添加一个新的 remote repo.
git remote add [alias] [url]
- 删除一个存在的 remote alias
git remote rm [alias]
- 重命名分支别名
git remote rename [old-alias] [new-alias]
- 更新远程的 url
git remote set-url [alias] [url]
- 获取本地未有的分支与提交节点
git fetch
- 拉去远程内容
git pull
- 提交内容至远端
git push