基本指令
git add
把要提交的文件的信息添加到暂存区中。当使用 git commit 时,将依据暂存区中的内容来进行文件的提交。
它通常将现有路径的当前内容作为一个整体添加,但是通过一些选项,它也可以用于添加内容,只对所应用的工作树文件进行一些更改,或删除工作树中不存在的路径了。
“索引”保存工作树内容的快照,并且将该快照作为下一个提交的内容。 因此,在对工作树进行任何更改之后,并且在运行 git commit
命令之前,必须使用 git add
命令将任何新的或修改的文件添加到索引。
该命令可以在提交之前多次执行。它只在运行 git add
命令时添加指定文件的内容; 如果希望随后的更改包含在下一个提交中,那么必须再次运行 git add
将新的内容添加到索引。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $ git add <文件路径>
$ git add -u [<文件路径>] $ git add --update [<文件路径>]
$ git add -A [<文件路径>] $ git add --all [<文件路径>]
$ git add -i [<文件路径>] $ git add --interactive [<文件路径>]
|
git branch
操作 Git 的分支命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| $ git branch
$ git branch -v
$ git branch <分支名>
$ git branch -m [<原分支名称>] <新的分支名称>
$ git branch -M [<原分支名称>] <新的分支名称>
$ git branch -d <分支名称>
$ git branch -D <分支名称>
|
git checkout
更新工作树中的文件以匹配索引或指定树中的版本。如果没有给出路径 - git checkout
还会更新 HEAD
,将指定的分支设置为当前分支。
1 2 3 4 5 6 7 8 9 10 11 12
| $ git checkout <分支名称>
$ git checkout -b <分支名称>
$ git checkout --orphan <分支名称>
$ git checkout <文件路径>
|
git checkout
是 git 最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区。
git clone
将存储库克隆到新创建的目录中,为克隆的存储库中的每个分支创建远程跟踪分支(使用 git branch -r
可见),并从克隆检出的存储库作为当前活动分支的初始分支。
1 2 3 4 5 6 7 8
| $ git clone <远程仓库的网址>
$ git clone <远程仓库的网址> <本地目录>
$ git clone <远程仓库的网址> -b <分支名称> <本地目录>
|
git commit
将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中。
1 2 3 4 5 6 7 8 9 10 11 12
| $ git commit
$ git commit -m "<提交的描述信息>"
$ git commit -a -m "<提交的描述信息>"
$ git commit --amend
|
git config
主要是用来配置 Git 的相关参数,其主要操作有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
$ git config <--local | --global | --system> -l
$ git config -l
$ git config <--local | --global | --system> -e
$ git config <--local | --global | --system> --add <name> <value>
$ git config <--local | --global | --system> --get <name>
$ git config <--local | --global | --system> --unset <name>
$ git config --global user.name <用户名> $ git config --global user.email <邮箱地址>
(如果GitHub账户绑定的邮箱进行了更改,对本地的git配置也要更改邮箱后才能继续将更新的代码上传到GitHub)
$ git config --global http.postBuffer <缓存大小>
$ git config --global color.ui true
$ git config --global credential.helper cache
$ git config --global credential.helper 'cache --timeout=<缓存时间>'
$ git config --global credential.helper store
|
Git 一共有3个配置文件:
- 仓库级的配置文件:在仓库的
.git/.gitconfig
,该配置文件只对所在的仓库有效。
- 全局配置文件:Mac 系统在
~/.gitconfig
,Windows 系统在 C:\Users\<用户名>\.gitconfig
。
- 系统级的配置文件:在 Git 的安装目录下(Mac 系统下安装目录在
/usr/local/git
)的 etc
文件夹中的 gitconfig
。
git diff
用于显示提交和工作树等之间的更改。
此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| $ git diff
$ git diff --cached $ git diff --staged
$ git diff HEAD
$ git diff <commit ID>
$ git diff <分支名称> <分支名称>
$ git diff <分支名称>...<分支名称>
|
git fetch
从远程仓库获取最新的版本到本地的 tmp 分支上。
1 2 3 4 5
| $ git fetch <远程仓库的别名>
$ git fetch <远程主机名> <分支名>
|
git init
初始化项目所在目录,初始化后会在当前目录下出现一个名为 .git 的目录。
git log
显示提交的记录。
1 2 3 4 5 6 7 8
| $ git log
$ git log <commit ID>
$ git log -<指定的数量>
|
git merge
用于将两个或两个以上的开发历史加入(合并)一起。
1 2 3 4 5
| $ git merge <分支名称>
$ git merge --no-commit <分支名称>
|
git mv
重命名文件或者文件夹。
1 2
| $ git mv <源文件/文件夹> <目标文件/文件夹>
|
git pull
从远程仓库获取最新版本并合并到本地。 首先会执行 git fetch
,然后执行 git merge
,把获取的分支的 HEAD 合并到当前分支。
git push
把本地仓库的提交推送到远程仓库。
1 2 3 4 5 6
| $ git push <远程仓库的别名> <本地分支名>:<远程分支名>
$ git push <远程仓库的别名> :<远程分支名> $ git push <远程仓库的别名> --delete <远程分支名>
|
git remote
操作远程库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| $ git remote
$ git remote -v $ git remote --verbose
$ git remote add <远程仓库的别名> <远程仓库的URL地址>
$ git remote rename <原远程仓库的别名> <新的别名>
$ git remote remove <远程仓库的别名>
$ git remote set-url <远程仓库的别名> <新的远程仓库URL地址>
|
git reset
还原提交记录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
$ git reset [<文件路径>] $ git reset --mixed [<文件路径>]
$ git reset <commit ID> $ git reset --mixed <commit ID>
$ git reset --soft <commit ID>
$ git reset --hard <commit ID>
|
git revert
生成一个新的提交来撤销某次提交,此次提交之前的所有提交都会被保留。
1 2
| $ git revert <commit ID>
|
git rm
删除文件或者文件夹。
1 2 3 4 5 6 7 8
| $ git rm <文件路径>
$ git rm -r <文件夹路径>
$ git rm --cached
|
git status
用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被 Git tracked 到。
git status
不显示已经 commit
到项目历史中去的信息。
看项目历史的信息要使用 git log
。
git tag
操作标签的命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| $ git tag
$ git tag <标签名称> [<commit ID>]
$ git tag -a <标签名称> -m <标签描述信息> [<commit ID>]
$ git checkout <标签名称>
$ git show <标签名称>
$ git tag -d <标签名称>
$ git push <远程仓库的别名> <标签名称>
$ git push <远程仓库的别名> –tags
|
速查表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| git init git config --global user.name "xxx" git config --global user.email "xxx@xxx.com" git config --global color.ui true git config --global color.status auto git config --global color.diff auto git config --global color.branch auto git config --global color.interactive auto git config --global --unset http.proxy git clone git+ssh://git@192.168.53.168/VT.git git status git add xyz git add . git commit -m 'xxx' git commit --amend -m 'xxx' git commit -am 'xxx' git rm xxx git rm -r * git log git log -1 git log -5 git log --stat git log -p -m git show dfb02e6e4f2f7b573337763e5c0013802e392818 git show dfb02 git show HEAD git show HEAD^ git tag git tag -a v2.0 -m 'xxx' git show v2.0 git log v2.0 git diff git diff --cached git diff HEAD^ git diff HEAD -- ./lib git diff origin/master..master git diff origin/master..master --stat git remote add origin git+ssh://git@192.168.53.168/VT.git git branch git branch --contains 50089 git branch -a git branch -r git branch --merged git branch --no-merged git branch -m master master_copy git checkout -b master_copy git checkout -b master master_copy git checkout features/performance git checkout --track hotfixes/BJVEP933 git checkout v2.0 git checkout -b devel origin/develop git checkout -- README git merge origin/master git cherry-pick ff44785404a8e git push origin master git push origin :hotfixes/BJVEP933 git push --tags git fetch git fetch --prune git pull origin master git mv README README2 git reset --hard HEAD git rebase git branch -d hotfixes/BJVEP933 git branch -D hotfixes/BJVEP933 git ls-files git show-branch git show-branch --all git whatchanged git revert dfb02e6e4f2f7b573337763e5c0013802e392818 git ls-tree HEAD git rev-parse v2.0 git reflog git show HEAD@{5} git show master@{yesterday} git log --pretty=format:'%h %s' --graph git show HEAD~3 git show -s --pretty=raw 2be7fcb476 git stash git stash list git stash show -p stash@{0} git stash apply stash@{0} git grep "delete from" git grep -e '#define' --and -e SORT_DIRENT git gc git fsck
|
Git 安装
Git是用于代码管理的工具,通过仓库(repository)来保存版本管理所需要的信息。Git在每台开发机上都会有一个仓库,代码可以先提交到本地仓库,然后再从本地仓库推送到远端仓库。Git的每次提交(commit)都会生成一个快照,快照保存了所有被修改文件的副本而不是增量。Git每次分支切换都是直接从快照中提取文件,而不是根据增量重新计算出最终文件,因此操作速度会比较。当前最流行的Android源码就是使用Git进行代码管理。
Windows上安装Git
在官网下载Git安装文件。按照默认选项安装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,打开Git Bash命令行窗口,说明安装成功。以后所有的Git命令均在这里运行。
MacOS上安装Git
Mac上的安装方法比较多,可以下载dmg安装文件安装。也可以使用homebrew安装。最简单也是推荐的方式是安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 git 命令即可。 如果没有安装过命令行开发者工具,将会提示你安装。
Linux上安装Git
对于Ubuntu或者Debian,运行以下命令就可以直接安装,老版本的Ubuntu需要运行sudo apt-get install git-core
1
| $ sudo apt-get install git
|
对于CentOS和Fedora使用以下命令
其他版本的Linux可以下载源码自己编译。
Git配置
打开命令行工具(Windows打开Git Bash),运行以下命令:
1 2 3 4 5 6
| $ git config --global user.name "your name" $ git config --global user.email "your email" $ git config --global push.default simple $ git config --global core.autocrlf false $ git config --global gui.encoding utf-8 $ git config --global core.quotepath off
|
Windows上还需配置:
1
| $ git config --global core.ignorecase false
|
以上配置适用于全部的Repository,如果某个Repository需要其他的用户名和邮箱,则cd到相应Repository目录执行以下命令:
1 2
| git config user.name "your name" git config user.email "your email"
|
设置SSH
打开命令行(Windows用户打开Git bash)键入以下命令:
1
| $ ssh-keygen -t rsa -C "your email"
|
然后一路回车,不需要输入任何密码。在当前用户目录的.ssh文件夹下(~/.ssh/id_rsa.pub)会生成id_rsa.pub文件,其内容就是ssh key pair。
对于Linux还需执行以下命令将ssh key告诉系统:
将生成的ssh key添加到github(账户创建和配置),git@osc或者任何提供git服务的网站,以后使用git提交到远端服务器就不需要密码了。
参考资料
https://git-scm.com/doc