仓库操作
新建仓库
git init
实质:新建一个.git目录,所有git有关的信息都在里面。
克隆仓库
git clone
查看远程仓库
git remote -v
添加远程仓库
git remote add [name] [url]
name 通常为origin
删除远程仓库
git remote rm [name]
修改远程仓库
git remote set-url --push [name] [newUrl]
拉取远程仓库
git pull [remoteName] [localBranchName]
推送远程仓库
git push [remoteName] [localBranchName]
本地分支操作
查看分支
git branch
创建分支
git branch branchName
切换分支
git checkout branchName
删除分支
git branch -d branchName
合并分支
git checkout master
git merge dev
文件操作
查看状态
git status
添加追踪
git add filename
git add .
删除文件
git rm
移动文件
git mv file the/new/path/
重命名文件
git mv file newfile
提交修改
git commit -m 'commit log'
远程分支操作
获取远程分支
git checkout -b [name] [remoteName]
例如:
git checkout -b myNewBranch origin/dragon
git 1.6版本以后,有简化的命令:
git checkout --track origin/[remoteName]
直接在本地检出与远程分支名字一致的分支。
跟踪远程分支
git branch --set-upstream-to=origin/ localBranchName
备注:如何查看跟踪关系,使用如下命令
git config --list
拉取远程分支到本地
git pull origin remoteBranchName:localBranchName
推送本地分支到远程
git push origin localBranchName:remoteBranchName
如果remoteBranchName远程分支不存在,则在远端自动创建。
推送当前分支到远程
git push origin remoteBranchName
同理,如果remoteBranchName远程分支不存在,则在远端自动创建。
备注:通常我们都直接用git push,不带后面的参数(建立好了追踪关系)。
删除远程分支
git push origin :remoteBranchName
git配置文件
用户配置文件位置
~/.gitconfig
查看配置信息
git config --list
配置用户名和密码
git config --global user.name gzchenquanbin
git config --global user.email [email protected]
开启颜色显示
git config --global corlor.ui true
配置编辑器
git config --glabal core.editor emacs #默认为vi或者vim
配置比较工具
git config --global merge.tool vimdiff
其它技巧
查看差异
git diff #显示的是工作区和暂存区的差别
git diff --stat #只显示差别的统计信息,不详细显示
git diff --cached/staged #显示的是暂存区和仓库的差别,也就是下次commit的内容
git diff HEAD #显示的是工作区和仓库的差别
git diff HEAD file #显示的是工作区和仓库指定文件(目录)的差别
git diff commitId file #显示的是工作区
git diff commitId1 commitId2 #比较两次commit之间的差异
git diff commitId1 commitId2 file #比较两次commit之间某个文件的差异
git diff branch1 branch2 #比较两个分支上的最新提交
git diff branch #比较当前分支与指定分支的当前目录差异
git diff branch file #比较当前分支与指定分支的指定文件(目录)差异
查看提交日志
git log
git log -2 #查看最近两次的提交日志
查看某次提交的详细修改
git show commitId
修改撤销
-
只在工作区修改,还没有add到暂存区
git checkout -- file
-
已经add到暂存区
git reset HEAD file
备注:之前的修改被回退到工作区
-
已经commit到仓库
git reset --hard HEAD^ #回退到上一个提交 git reset --hard HEAD^^ #回退到上上一个版本 git reset --hard HEAD~10 #往前回退10个版本 git reset --hard commitID #指向任意一个提交
-
已经push到远端
sorry,无能为力了
藏匿与恢复
git stash
git stash pop
.gitignore文件
项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。
当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时"git status"命令的输出也会有它们。
这时,你可以在你的顶层工作目录中添加一个叫".gitignore"的文件,来告诉Git系统要忽略 掉哪些文件,下面是文件内容的示例:
# 以'#' 开始的行,被视为注释.
# 忽略掉所有文件名是 foo.txt 的文件.
foo.txt
# 忽略所有生成的 html 文件,
*.html
# foo.html是手工维护的,所以例外.
!foo.html
# 忽略所有.o 和 .a文件.
*.[oa]
#忽略文件夹(所有的.idea子目录)
.idea/
# 如下的只忽略根目录下的.idea目录
/.idea/
.gitignore不生效怎么办
有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'