Brief introduction to git and github
记录一些学习Git和GitHub时碰到的困惑
Subversion 和 Git 的关系
Subversion
Subversion 是集中型版本管理系统的典型代表。
- Subversion只有一个仓库,建立在服务器上。所有的commit都是与这个服务器交互。
- 如果服务器宕机了,可能仓库也随之破坏了
Git
git是分散型的代表。
- git用户每个都有一个仓库,本地的开发环境就有仓库。可以通过网络向远程的仓库发送请求。
- GitHub为我们提供了一个远程的仓库,git提交后只是提交到本地仓库,要提交到github的远程仓库,需要发送请求。
Git 的一些知识
- SSH key的添加
- 添加了SSH key就可以和远程仓库建立连接。具体方法GitHub官网上很详细。添加密钥之后,就可以输入
ssh -T git@github.com
进行认证
-
.gitignore文件
这个文件里记录一些你在git版本管理时不需要管理的文件,在github上面创建repo时可以选择一个模板。也可以自己写。 -
常用命令
git status
查看当前git仓库的状态。git add
将文件加到git仓库管理对象,这个只是添加到一个暂存区。git commit
将暂存区的文件保存到仓库的历史记录里。可以通过这些记录,在工作树中复原文件。这里git commit 如果不加-m
那么就会启动编辑器,输入相应的信息。git log
查看提交记录,q退出。git diff
查看工作树与暂存区,最新提交之间的差别。其中,git diff
可以查看工作树和暂存区的差别,查看工作树与最新提交的差别,git diff HEAD
。> 养成一个好习惯,在git commit之前git branch
可以查看当前仓库的分支,个人认为,分支是git的最大特性,可以进行并行开发,而且互不影响。git check out
切换分支git merge
合并分支
-
进阶命令,更改提交
git reset
回溯历史版本。git reset --hard
+目标时间点的哈希值,就可以回到该时间点的版本。可以用git reflog
查看仓执行过的操作日志。- 在多个分支进行工作的时候,需要解决冲突,
git merge
的时候会启动编辑器,可以看到冲突内容‘======’以上是当前HEAD的内容;以下是要合并的内容。 git commit --amend
修改提交信息,修改git commit -m"" 的-m的内容能够git rebase -i
压缩提交历史,可以压缩多个commit成一个commit。常用于修改一些小的错误,不需要额外的commit历史记录,它对我们的历史没有意义。可以用这个命令,会进入编辑界面,可以通过几条命令的修改,具体文件里有。
-
git 与remote 仓库的连接
git remote add
添加远程仓库
git remote add origin git@github.com:zhaoshenglong/reponame.git
这条命令将会添加一个远程仓库git@github.com:zhaoshenglong/reponam.git
是github创建的仓库路径名,zhaoshenglong
是我饿用户名,reponame.git
是某个我在github上创建的仓库名,origin
是将这个远程仓库的名称设置为origin
。git push -u origin master
将当前仓库的内容推送到origin(远程仓库)的master分支,-u
参数可选,将origin的master分支设置为本地仓库的upstream,添加了这个参数,以后运行git pull就可以直接在本地仓库的这个分支上直接从origin的master分支上获得内容。git push -u origin xxx
这条命令将会在远程仓库创建一个分支,并把当前仓库的内容放进相应分支。
-
GitHub pull request
- pull request 是github的最大的特色,是开源合作写代码的基础,也是github最不容易掌握的特性。
- 首先,将项目仓库
fork
到自己github,它会自动在你的github上创建一个相同名称的仓库。 - 第二步,就是使用
git clone
将需要的github仓库clone 到本地仓库 - 第三步,建立一个特性分支,在这个特性分支里进行编辑。
- 在自己的github的远程仓库上创立特性分支
- 将本地仓库的内容提交到远程仓库
- 最后在fork的github用户里,创建一个pull request申请,请求合并分支,等待管理者通过申请,或者拒绝。
-
git work flow
这部分后面再记录。
参考书籍
GitHub入门与实践[日]大塚弘记(个人觉得很很适合入门,讲解很清楚)