检查已有的配置信息:git config --list
检查当前文件状态:git status
跟踪新文件
git add file 只要在 “Changes to be committed” 这行下面的,就说明是已暂存状态。
git add 命令(这是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等)
忽略某些文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。来看一个实际的例子:
$ cat .gitignore
*.[oa]
*~
第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。
提交更新
git commit
另外也可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新:
$ git commit -m "case...."
git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
跳过使用暂存区域
$ git commit -a -m 'case....'
移除文件
要在 Git 中对文件改名,可以这么做:$ git mv file_from file_to
其实,运行 git mv 就相当于运行了下面三条命令:
$ mv README.txt README
$ git rm README.txt
$ git add README
查看提交历史
git log
我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新:
$ git log -p -2
还有许多摘要选项可以用,比如 --stat,仅显示简要的增改行数统计:
$ git log --stat
表 2-1 列出了常用的格式占位符写法及其代表的意义。
选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
用 oneline 或 format 时结合 --graph 选项,可以看到开头多出一些 ASCII 字符串表示的简单图形,形象地展示了每个提交所在的分支及其分化衍合情况。在我们之前提到的 Grit 项目仓库中可以看到:
$ git log --pretty=format:"%h %s" --graph
查看当前的远程库
$ git remote -v
查看文件
cat file
撤销工作区修改
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
//git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令。
撤销暂存区修改
Git同样告诉我们,用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD readme.txt
删除:
$ rm file//删除工作区的文件
1.$ git commit -m "remove file"//从版本库中删除该文件
2.$ git checkout -- file //如果工作区删除错了只需要从版本库中还原
创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
在github中添加sshkey:
setting中选择SSH keys ,然后New SSH key,title随便取,key里面粘贴id_rsa.pub中的内容.
关联远程仓库:
$ git remote add origin git@github.com:karlwangshengyi/wsy.git
错误提示:
git init 产生的目录解释
error: src refspec master does not match any.
引起该错误的原因是,目录中没有文件,空目录是不能提交上去的
error: insufficient permission for adding an object to repository database ./objects
服务端没有可写目录的权限
错误提示:fatal: remote origin already exists.
解决办法:$ git remote rm origin
错误提示:error: failed to push som refs to ........
解决办法:$ git pull origin master //先pull 下来 再push 上去
推送代码:
$ git push origin master
克隆代码:
$ git clone git@github.com:karlwangshengyi/wsy.git
//你也许还注意到,GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。
//实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
//使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,
//但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
git bash复制粘贴:
右键,属性,设置快速编辑模式。cd ..返回上一级。
创建分支dev:
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev //切换分支
Switched to branch 'dev'
查看分支:
git branch //git branch命令会列出所有分支,当前分支前面会标一个*号。
合并分支,我们把dev分支的工作成果合并到master分支上:
$ git merge dev
删除分支:
$ git branch -d dev
保存贮藏:
$ git stash //保存当前的工作环境,临时修改bug时可能保存当前环境然后新建临时分支解决问题,提交后删除bug分支,再继续修复当前问题
$ git stash list //查看工作现场
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
销毁分支:
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
不一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致; 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
打标签:
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
git show <tagname>查看标签信息。
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。