*注:我学习Git的平台为Windows,学习工具为Babun。
// 设置用户名和Email地址
git config --global user.name "Your Name"
;
git config --global user.email "email@example.com"
。
当然也可以直接修改用户目录下的 .gitconfig 文件,在文件中添加:
[user]
name = Your Name
email = email@example.com
或直接修改git仓库中的 .git 文件夹里的 config 文件,不过前两种是全局的(即所有的仓库都是这个用户名和Email),而后一种在git仓库中修改的方法是局部的(即只有该仓库的用户名和Email是设置的这个,其它的仓库需要重新设置)。
创建仓库:git init
。
// 在版本库中添加文件(分两步)
将文件添加到仓库:git add <file>
;
将文件提交到仓库:git commit -m "description"
。
查看仓库状态(是否修改,是否提交):git status
;
查看修改内容:git diff <file>
;
查看工作区和版本库里面最新版本的区别:git diff HEAD -- <file>
。
查看各版本提交内容:git log
;
查看命令历史:git reflog
;
回到上一版本(HEAD指最近提交的一个版本):git reset --hard HEAD^
或 git reset --hard HEAD~1
;
跳转到指定版本(commit_id指版本id):git reset --hard <commit_id>
。
// git add 将文件修改从工作区添加到暂存区,git commit 将文件修改从暂存区添加到版本库
撤销修改:1. git checkout -- <file>
丢弃工作区的修改;
2. git reset HEAD <file>
丢弃暂存区的修改信息;
git rm <file>
删除工作区文件并将删除信息添加到暂存区,
这时如果还没有提交(即 git commit),可通过两步撤销删除,
首先撤销暂存区的删除信息:git reset HEAD <file>
,
再撤销工作区的文件删除:git checkout -- <file>
;
当然如果已经提交了,就只能回退版本了。
// 使用远程仓库
创建SSH Key:ssh-keygen -t rsa -C "youremail@example.com"
,
输入此命令后,在用户目录下.ssh目录中生成 id_rsa 和 id_rsa.pub 两个文件,id_rsa 是私钥,不能泄露,id_rsa.pub 是公钥,需要给别人。点击GitHub的“Settings”中的“SSH and GPG keys”,点击“New SSH key”,在key文本框里粘贴id_rsa.pub文件中的内容即可,Title任意填。
关联远程版本库:git remote add origin git@server-name:path/repo-name.git
;
GitHub中远程库地址:点击“Clone or download”可显示 或 直接显示在“HTTPS|SSH”后面的文本框中。
第一次提交远程版本库:git push -u origin master
;
以后提交远程版本库:git push origin master
。
我在提交远程库的时候,出现以下问题:
{ Git } master » git push -u origin master
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0670 for ‘/home/user/.ssh/id_rsa’ are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
Load key “/home/user/.ssh/id_rsa”: bad permissions
Permission denied (publickey).
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.
解决方法为:更改id_rsa权限:
{ .ssh } » chmod 600 id_rsa
参考资料:解决id_rsa权限不够 (http://robinwu.iteye.com/blog/1216647)
从远程库克隆一个本地库:git clone git@server-name:path/repo-name.git
。
// 建立分支
查看分支:git branch
;
创建分支:git branch <name>
;
切换分支:git checkout <name>
;
创建+切换分支:git checkout -b <name>
;
合并某分支到当前分支:git merge <name>
(不推荐);
删除分支:git branch -d <name>
。
查看分支合并图:git log --graph
。
//合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能用git log –graph看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并,这种合并要创建一个新的commit,所以加上-m参数,把commit描述写进去,命令如下:
git merge --no-ff -m "merge with no-ff" <name>
(推荐使用这一种方式合并分支)。
// 当要去做另一分支上的事,而当前分支又没完成,可先:
保存当前工作:git stash
;
查看保存的工作:git stash list
;
// 当另一分支做完并提交后,再回到当前分支,
恢复当前工作并删除保存工作列表:git stash pop
。
// 多人协作时
查看远程库信息,使用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
,如果有冲突,要先处理冲突。
*注:不推荐直接使用git pull,而应该使用git fetch origin branch-name
,git fetch是从远程分支获取最新的版本到本地但不合并,这样就可以方便我们对比查看更新情况,然后再决定是否合并;git pull相当于git fetch 和 git merge,直接抓取并合并。
参考资料:Git fetch和git pull的区别(http://blog.youkuaiyun.com/hudashi/article/details/7664457)
// 管理标签
新建一个标签(默认为HEAD):git tag <name>
,
也可以指定一个commit id:git tag <name> <commit_id>
;
指定标签信息:git tag -a <tagname> -m "description"
;
查看所有标签:git tag
;
查看标签信息:git show <tagname>
。
推送一个本地标签到远程:git push origin <tagname>
;
推送全部未推送过的本地标签:git push origin --tags
;
// 删除远程标签,要先
删除一个本地标签:git tag -d <tagname>
;
// 再
删除一个远程标签:git push origin :refs/tags/<tagname>
。
// 忽略特殊文件
将要忽略的文件名写入.gitignore文件中,然后commit即可(可使用通配符*)。
参考资料
[1] Git教程(http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)