GitHub使用教程
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013752340242354807e192f02a44359908df8a5643103a000
http://www.cnblogs.com/fnng/archive/2011/08/25/2153807.html
1. 简介
Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。GitHub可以托管各种git库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性。它针对的是 Linux 平台,因此 git 和 Windows 从来不是最好的朋友,因为它一点也不像 Windows。GitHub 发布了GitHub for Windows,为 Windows 平台开发者提供了一个易于使用的 Git 图形客户端。
GitHub for Windows 是一个 Metro 风格应用程序,集成了自包含版本的 Git,bash 命令行 shell,PowerShell 的 posh-git 扩展。GitHub 为 Windows 用户提供了一个基本的图形前端去处理大部分常用版本控制任务,可以创建版本库,向本地版本库递交补丁,在本地和远程版本库之间同步。微软也通过CodePlex向开发者提供 git 版本控制系统,而 GitHub 创造了一个更具有吸引力的 Windows 版本。
2. 安装
安装比较简单,一路next即可,其中有两个地方需要注意一下。
1)Git Bash是指git安装好之后,有一个专用的命令行工具(开始->Git->Git Bash),像cmd一样,它可以执行一些linux上的命令,方便操作。但在windows上,不能复制粘贴,不太好用。所以我们在安装的时候出现如下安装过程时一般会选择第2项或第3项,在windows的cmd上直接运行git命令。
2)让我们选择如何处理文本文件中的选行符。git考虑到合作者可能在不同的操作系统下,如windows下使用\r\n,linux下使用\n,mac下使用\r。为了既能保证服务器上的代码使用相同的换行符,在各自的电脑上又能使用各自的换行符,所以有三种处理方式:
下载时把换行符变成\r\n,提交时变成\n
下载时不转换,提交时变成\n
下载和提交时都不处理
作为windows用户,我们应该选择第一项。
3.常用命令
$ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit
$ git init Initialized empty Git repository in /Users/michael/learngit/.git/
$ git add readme.txt
$
git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
$ git status
$ git
diff readme.txt
$ git
commit -m "add distributed"
$ git
log
$ git log --pretty=oneline
$ git reset --hard HEAD^
$ cat readme.txt
$ git reset --hard 3628164
$ git reflog
$ git checkout -- readme.txt
$ git reset HEAD readme.txt
$ rm test.txt
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
$ git checkout -- test.txt
$ ssh-keygen -t rsa -C "youremail@example.com"
$ git remote rm origin
$ git pull origin master
$ git remote add origin git@github.com:ZYNewStart/FirstGit.git
$ git push -u origin master
$ git clone git@github.com:michaelliao/gitskills.git
要关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git
;
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph
命令可以看到分支合并图。
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。
$ git merge --no-ff -m "merge with no-ff" dev
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
$ git stash 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
一是用
用git status
查看工作区
用git stash list
命令看工作现场
恢复工作现场:git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;另一种方式是用git stash pop
,恢复的同时把stash内容也删了。
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>
强行删除。
-
查看远程库信息,使用
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 push origin branch-name
推送自己的修改; -
如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并; -
如果合并有冲突,则解决冲突,并在本地提交;
-
没有冲突或者解决掉冲突后,再用
git push origin branch-name
推送就能成功!
如果git pull
提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name
。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
git tag <name>
就可以打一个新标签:
$ git tag v0.9 6224937 //commit id
6224937
$ git tag -a v0.1 -m "version 0.1 released" 3628164//用-a
指定标签名,-m
指定说明文字:
命令git tag
查看所有标签:
git show <tagname>
查看标签信息:
用命令git show <tagname>
可以看到说明文字:
-
命令
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>
可以删除一个远程标签。
4.错误解决方法
1)在执行
$ git remote addorigin git@github.com:defnngj/hello-world.git
错误提示:fatal: remote origin already exists.
解决办法:
$ git remote rm origin
然后在执行:$ git remote add origin git@github.com:defnngj/hello-world.git 就不会报错误了
2) 在执行
$ git push origin master
错误提示:error:failed to push som refs to.......
解决办法:
$ git pull origin master // 先把远程服务器github上面的文件拉下来,再push 上去。
3)关于使用Github中.gitignore不起作用
git rm -r --cached .
git add .
git commit -m 'update .gitignore'