- Git 常用命令
1.git config
>配置个人的用户名称和电子邮件地址:
$ git config --global user.name "alice"
$ git config --global user.email alice@163.com
>查看配置信息
$ git config --list
>直接查阅某个环境变量的设定
$ git config user.name
>Git显示颜色,会让命令输出看起来更醒目:
$ git config --global color.ui true
2.git init
>使用您当前目录作为Git仓库,我们只需使它初始化。
$ git init
使用我们指定目录作为Git仓库。
$ git init newrepo
3.git clone
>从现有仓库克隆
$ git clone git://github.com/schacon/grit.git
>从固定分支克隆
$ git clone -b 分支 git地址
4.git add
>将该文件添加到缓存,"."代表所有
$ git add file1 file2
>用-f强制添加到Git(即使ignore):
$ git add -f App.class
5.git status
>查看文件的状态,-s简短输出
$ git status -s
6.git diff
>执行 git diff 来查看执行 git status 的结果的详细信息。
>git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景
*尚未缓存的改动:$ git diff
*查看已缓存的改动: $ git diff --cached
*查看已缓存的与未缓存的所有改动:$ git diff HEAD
*显示摘要而非整个 diff:$ git diff --stat
>git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别
7.git commit
>使用 git add 命令将想要快照的内容写入了缓存,而执行git commit 记录缓存区的快照。
>-m 选项以在命令行中提供提交注释
$ git commit -m "我的提交注释"
>-a 直接跳过git add 步骤直接提交
$ git commit -a -m "我的提交注释"
8.git reset HEAD
>git reset HEAD^ 命令用于回复版本。
>git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区
9.git rm
>git rm 将文件从缓存区中移除。
$ git rm hello.php
>如果要在工作目录中留着该文件,可以使用命令:
$ git rm --cached。
10.git pull
>更新远程更新到本地:
$ git pull origin master
11.git push
>推送本地更新到远程:
$ git push origin master
12.git checkout (branchname)
>切换分支
$ git checkout (branchname)
>创建并切换分支
$ git checkout -b (branchname)
>丢弃工作区的修改
$ git checkout -- file
13.git merge
>合并分支
$ git merge xx
>使用非默认策略,加注释
git merge --no-ff -m "merged bug fix 101" issue-101
14.git branch
>查看分支
$ git branch
>创建分支
$ git branch (branchname)
>删除分支
$ git branch -d (branchname)
15.git log
>查看记录[使用q键退出]
$ git log
>简洁查看记录
$ git log --oneline
>用 --graph 选项,查看历史中什么时候出现了分支、合并
$ git log --oneline --graph
>用 '--reverse'参数来逆向显示所有日志
$ git log --reverse --oneline
>查找指定用户的提交日志可以使用命令:git log --author "alice"
$ git log --author=Linus --oneline -5
>指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after
$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
16.git reflog
用来记录你的每一次命令(用于恢复代码)
~ HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,
使用命令git reset --hard commit_id。
~ 要穿梭之前,用git log可以查看提交历史,以便确定要回退到哪个版本。
~ 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
17.git stash
>用于把当前工作现场“储藏”起来,等以后恢复现场后继续工作
>git stash list命令查看“储藏”列表
>恢复现场:一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;另一种方式是用git stash pop,恢复的同时把stash内容也删了:
18.git remote
>要查看远程库的信息
>git remote -v显示更详细的信息
19.git tag
>命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
>git tag -a <tagname> -m "blablabla..."可以指定标签信息;
>git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
>命令git tag可以查看所有标签。
>命令git tag -d <tagname>可以删除一个本地标签;
>命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
20.git check-ignore
>查看那个规则不匹配,可以用git check-ignore命令检查
21. git push
>推送分支,就是把该分支上的所有本地提交推送到远程库。
$ git push origin master
>命令git push origin <tagname>可以推送一个本地标签;
>命令git push origin --tags可以推送全部未推送过的本地标签;
22.git pull
>git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。
$ git pull <远程主机名> <远程分支名>:<本地分支名>
>比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。
$ git pull origin next:master
>如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull origin next
23.给Git配置好别名,就可以输入命令时偷个懒[具体配置查看.git/config]
>git status|git st
$ git config --global alias.st status
>git checkout|git co
$ git config --global alias.co checkout
>git commit|git ci
$ git config --global alias.ci commit
>git branch|git br
$ git config --global alias.br branch
>git reset HEAD test.py(撤销修改)|git unstage test.py
>配置一个git last,让其显示最后一次提交信息
$ git config --global alias.last 'log -1'
>git log | git lg
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
- Git 的工作流程
一般工作流程是这样的:
1.克隆Git仓库作为工作副本。
2.可以添加/编辑文件,修改工作副本。
3.如果有必要,你还服用其他开发人员的变化,更新工作副本。
4.审查前提交。
5.提交修改。如果一切都很好,然后推到存储库的更改。
6.提交之后,如果知道是什么错误,那么纠正最后一次提交,并推送修改到版本库。
以下是工作流程的图形表示:
- Git SSH Key生成及克隆项目
2.1设置Git的user name和email:
$ git config --global user.name "alice"
$ git config --global user.email " alice@163.com"
2.2.生成SSH密钥过程:
1.用户主目录下建立.ssh文件夹
1.查看是否已经有了ssh密钥:cd ~/.ssh
如果没有密钥则不会有此文件夹,有则备份删除
2.3.生成密钥:
$ ssh-keygen -t rsa -C alice@163.com
密码为空,按3个回车。
最后得到了两个文件:id_rsa和id_rsa.pub
2.4.在github上添加ssh密钥
登陆GitHub,打开“Account settings”,“SSH Keys”页面:
打开https://github.com/settings/keys ,登陆,然后添加ssh,这要添加的是“id_rsa.pub”里面的公钥。
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
2.5.搜索项目,复制ssh 地址
- GitHub上传已存在的项目
http://blog.csdn.net/wodeai1235/article/details/60328826
- 经验总结
1. 初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件;.代表所有
第二步,使用命令git commit,完成。
2. 要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
3. HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
- @工作区:工作的目录 @暂存区:git add 就会加入暂存区
需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
- git 管理跟踪的是文件的修改,不是文件本身,
- 每次修改,如果不add到暂存区,那就不会加入到commit中
7. 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
8. 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
9. 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考【3】,不过前提是没有推送到远程库。
10. 命令git rm用于删除一个文件,
确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit[ git rm test.txt -> git commit]
把误删的文件恢复到最新版本,git checkout – file
11. 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
如:git remote add origin git@github.com:hapier/learngit.git
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步.
12. 要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
13. 查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
14. 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph命令可以看到分支合并图
15. Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
16. 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
git stash
>用于把当前工作现场“储藏”起来,等以后恢复现场后继续工作
>git stash list命令查看“储藏”列表
>恢复现场:一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
17. 开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
18. 多人协作的工作模式通常是这样:
1.首先,可以试图用git push origin branch-name推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
Tips:如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
19. 查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
20. tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起
21. 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
22. 在GitHub上,可以任意Fork开源仓库;
自己拥有Fork后的仓库的读写权限;
可以推送pull request给官方仓库来贡献代码。
23. 忽略某些文件时,需要编写.gitignore;放在工作区根目录
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
用-f强制添加到Git:$ git add -f App.class
查看那个规则不匹配,可以用git check-ignore命令检查:git check-ignore -v App.class
24.给Git配置好别名,就可以输入命令时偷个懒[具体配置查看.git/config]
>git status|git st
$ git config --global alias.st status
>git checkout|git co
$ git config --global alias.co checkout
>git commit|git ci
$ git config --global alias.ci commit
>git branch|git br
$ git config --global alias.br branch
>git reset HEAD test.py(撤销修改)|git unstage test.py
>配置一个git last,让其显示最后一次提交信息
$ git config --global alias.last 'log -1'
>git log | git lg
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
25. 搭建Git服务器非常简单,通常10分钟即可完成;
要方便管理公钥,用Gitosis;
要像SVN那样变态地控制权限,用Gitolite。
26.在git中设置代理
git config –-global http.proxy http://192.165.154:5452