GitHub 常用命令使用介绍(新同学入门)

经济在不断发展,社会在不断进步,以往的互联网在现在看来都可以称为传统互联网了,因为技术不断的在突破和革新。

本文主要介绍一下版本管理工具,我猜测很多人还是用SVN、CVS或者Resion,但是,今天我想告诉大家,那些都已经过时了,大家有兴趣的可以学学新一代版本管理工具GitHub.

GitHub是分布式管理工具,相比较SVN更具优势,GitHub使用前需要在官网先注册账号,注册完以后,可以把自己的项目上传上去,然后无论走到哪里都可以进行开发,并且提交,提交的时候,GitHub跟SVN有所不同,GitHub可以先在本地提交,最后推到资源库,SVN只有提交操作(直接提交到服务器),下面介绍基本入门。

1.注册账号

注册地址:https://github.com

2.创建资源库

注册完账号后,直接点击新建即可,我觉得新建资源库不用我来详细介绍,随便看看应该就会了。

3.克隆刚刚创建的资源库。

创建的资源库就是我们要开发的项目,为了方便开发,我们需要克隆到本地,SVN的术语叫checkout.

首先打开本地的工作空间 cd e:/workspace

使用Git命令:

git clone https://github.com/JackySoft/MyTest.git

也可以克隆ssh协议的文件,比如:

git clone ssh://git@10.137.20.113:2222/root/test.git

大家在使用git命令之前,需要先安装Git Bash

下载地址:https://git-scm.com/download/或者https://git-for-windows.github.io/

大家可能有点不知道Git Bash是干什么的,它主要是Git版本管理的命令行,就好比SVN也有专门的命令行软件,只不过大家习惯用SVN客户端来操作更简单。GitHub也有图形工具,SourceTree,但是,好像大多人更喜欢用命令行,可能觉得比较高深或者牛叉吧。我当然两个都用,我觉得主要还是为了提高开发效率。

克隆完项目以后,项目就已经保存到我们刚刚的工作空间里面去了,然后就可以在这个项目的基础上进行编程了。

4.新建文件,添加到索引库

在该项目基础上新建一个文件比如:a.txt后

需要添加到索引库,命令如下:

git add a.txt等同于svn add a.txt

5.提交代码到本地仓库

git commit -m "test github"

注意,此处提交只是将本地的修改提交到本地的仓库,GitHub上的项目并不会改变,这一点和SVN有很大的不同,这就是分布式开发。

6.推送到远程仓库

git push

输入完此命令后,命令行会提示让你输入账号和密码,输入完即可推送。

7.刷新GitHub官网看看项目是否有变化,此时应该已经同步完成。

有冲突后,如果确定不要远程的代码可使用force,这个命令要慎用

git push --force origin

会用本地的代码覆盖远程仓库的代码

我相信刚开始学GitHub的时候有一些晕,我刚开始的时候也是非常晕,里面的概念浑然不懂,看了很多文档,并亲自测试,才明白,于是,我觉得需要记录下来,给那些曾经像我一样的小白学习一下,减轻一些负担。

另外给大家提供一些Git的学习站点:

http://www.bootcss.com/p/git-guide/

另外,还有一种情况需要跟大家介绍:

本地已开发的项目,想要上传到GitHub上面去,第一种方式,可以直接打开GitHub官网,将自己的项目拖拽上去。

第二种方式:

cd e:\workspace\Test

进入到项目根目录下面后,通过git init 初始化一个本地仓库

git add -A 可将本地所有文件提交到暂存区

git commit -m "demo" -a 可将所有暂存区的文件提交到本地仓库。

git remote add origin https://github.com/JackySoft/MyTest.git 将本地仓库的项目推送到远程仓库中。

git push origin master  将本地origin主机master分支代码推送到远程master分支上,默认是master分支。

git push orgin master:data 将本地origin主机master分支代码推送到远程data分支上,通过冒号来区分分支

如果远程仓库已经存在一些文件了,此时 推送会报冲突,需要先将远程仓库拉取到本地,再进行推送。

git pull origin master ,将远程master分支拉取到本地

相关命令统计:

创建类命令 
git brach branchName 创建名为branchName的branch 
git checkout branchName 切换到branchName的branch 
git checkout -b 创建并切换,也就是上面两个命令的合并

git brach branchName ef71 从commit ef71创建名为branchName的branch

显示信息类命令 
git ls-files -u 显示冲突的文件,-s是显示标记为冲突已解决的文件

git diff 对比工作区和stage文件的差异 
git diff --cached 对比stage和branch之间的差异

git branch 列出当前repository下的所有branch 
git branch --a 列出local 和remote下的所有branch

git ls-files --stage 检查保存在stage的文件

git log 显示到HEAD所指向的commit为止的所有commit记录 。使用reset HEAD~n 命令使HEAD指针向前移动,会导致HEAD之后的commit记录不会被显示。

git log -g则会查询reflog去查看最近做了哪些动作,这样可以配合git branch 恢复之前因为移动HEAD指针所丢弃的commit对象。如果reflog丢失则可以通过git fsck --full来查看没被引用的commit对象。 
git log -p -2 对比最新两次的commit对象 
log -1 HEAD

git log --pretty=oneline

git log --stat 1a410e 查看sha1为1a410e的commit对象的记录

git blame -L 12,22 sth.cs 如果你发现自己代码中 的一个方法存在缺陷,你可以用git blame来标注文件,查看那个方法的每一行分别是由谁 在哪一天修改的。下面这个例子使用了-L选项来限制输出范围在第12至22行

撤销类命令 
如果是单个文件 
1.use "git reset HEAD <file>..." to unstage 
如果已经用add 命令把文件加入stage了,就先需要从stage中撤销

然后再从工作区撤销 
2.use "git checkout -- <file>..." to discard changes in working directory

git checkout a.txt  撤销a.txt的变动(工作区上的文件) 
如果是多个文件 
git chenkout .

如果已经commit 了,则需要 
git commit --amend 来修改,这个只能修改最近上一次的,也就是用一个新的提交来覆盖上一次的提交。因此如果push以后再做这个动作就会有危险

$ git reset --hard HEAD 放弃工作区和index的改动,HEAD指针仍然指向当前的commit.(参照第一幅图)

这条命令同时还可以用来撤销还没commit的merge,其实原理就是放弃index和工作区的改动,因为没commit的改动只存在于index和工作区中。

$ git reset --hard HEAD^ 用来撤销已经commit的内容(等价于 git reset --hard HEAD~1) 。原理就是放弃工作区和index的改动,同时HEAD指针指向前一个commit对象。

git revert 也是撤销命令,区别在于reset是指向原地或者向前移动指针,git revert是创建一个commit来覆盖当前的commit,指针向后移动

提交类命令 
git add 跟踪新文件或者已有文件的改动,或者用来解决冲突

git commit 把文件从stage提交到branch

git commit -a 把修改的文件先提交到stage,然后再从stash提交到branch

删除类命令 
git rm --cached readme.txt 只从stage中删除,保留物理文件

git rm readme.txt 不但从stage中删除,同时删除物理文件

git mv a.txt b.txt 把a.txt改名为b.txt

Merge类命令

在冲突状态下,需要解决冲突的文件会从index打回到工作区。

1.用工具或者手工解决冲突 
2.git add 命令来表明冲突已经解决。 
3.再次commit 已解决冲突的文件。

$ git reset --hard ORIG_HEAD 用来撤销已经commit 的merge. 
$ git reset --hard HEAD 用来撤销还没commit 的merge,其实原理就是放弃index和工作区的改动。

git reset --merge ORIG_HEAD,注意其中的--hard 换成了 --merge,这样就可以避免在回滚时清除working tree。

git其他命令

创建新分支并命名,此处我们创建名为 new_stuff 的分支

git branch newBranch

切换新分支

git checkout newBranch

添加所改动的文件以便提交

git add .

提交改动

git commit -m "create a branch"

回到master分支

git checkout master

合并到主分支

git merge newBranch

1) 远程仓库相关命令
检出仓库:$ git clone git://github.com/jquery/jquery.git
查看远程仓库:$ git remote -v
添加远程仓库:$ git remote add [name] [url]
删除远程仓库:$ git remote rm [name]
修改远程仓库:$ git remote set-url --push[name][newUrl]
拉取远程仓库:$ git pull [remoteName] [localBranchName]
推送远程仓库:$ git push [remoteName] [localBranchName]

2)分支(branch)操作相关命令
查看本地分支:$ git branch
查看远程分支:$ git branch -r
创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支
切换分支:$ git checkout [name]
创建新分支并立即切换到新分支:$ git checkout -b [name]
删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项
合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并
创建远程分支(本地分支push到远程):$ git push origin [name]
删除远程分支:$ git push origin :heads/[name]
我从master分支创建了一个issue5560分支,做了一些修改后,使用git push origin master提交,但是显示的结果却是'Everything up-to-date',发生问题的原因是git push origin master 在没有track远程分支的本地分支中默认提交的master分支,因为master分支默认指向了origin master 分支,这里要使用git push origin issue5560:master 就可以把issue5560推送到远程的master分支了。

如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。

$ git push origin test:master // 提交本地test分支作为远程的master分支 //好像只写这一句,远程的github就会自动创建一个test分支
$ git push origin test:test // 提交本地test分支作为远程的test分支

如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。

$ git push origin :test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
3)版本(tag)操作相关命令
查看版本:$ git tag
创建版本:$ git tag [name]
删除版本:$ git tag -d [name]
查看远程版本:$ git tag -r
创建远程版本(本地版本push到远程):$ git push origin [name]
删除远程版本:$ git push origin :refs/tags/[name]

上一篇:情人节——爱心代码


下一篇:app后端设计(11)-- 系统架构(2014.12.05更新)