git - 简明指南

一.在Linux上安装Git

首先,你可以试着输入git,看看系统有没有安装Git:

$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

在Windows上安装Git

msysgit是Windows版的Git,从https://git-for-windows.github.io下载(网速慢的同学请移步国内镜像),然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "FrizZzy"
$ git config --global user.email "Frizy@163.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

二.创建本地新仓库并管理本地仓库


工作流
你的本地仓库由 git 维护的三棵“树”组成。第一个是你的 工作目录 ,它持有实际文件;第二个是 暂存区(Index) ,它像个缓存区域,临时保存你的改动;最后是 HEAD ,它指向你最后一次提交的结果。


创建新文件夹,打开,然后执行

git init

添加文件到Git仓库,分两步(1,2):

1.使用命令

git add <file>

注意,可反复多次使用,添加多个文件;
2.使用命令

git commit -m "xxx"

-m后面输入的是本次提交的说明

3.要随时掌握工作区的状态,使用

git status

4.如果git status告诉你有文件被修改过,用

git diff

可以查看修改内容。

5.显示从最近到最远的提交日志

git log

6.回退到上一个版本“add distributed”,就可以使用
git reset命令:

git reset --hard HEAD^

or

git reset --hard 3628164

其中,id号用一下命令查看:

git reflog

7.把暂存区(add 后)的修改撤销掉(unstage),重新放回工作区:

git reset HEAD xxx

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

8.把readme.txt文件在工作区的修改全部撤销

git checkout -- xxx

git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令(git checkout master).

9.删除一个文件

rm xxx

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了.

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:

$ git rm xxx
$ git commit -m "remove xxx"

现在,文件就从版本库中被删除了。

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- xxx

三.关联本地与远程仓库

本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
1.创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com" 

然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

2.登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容.点“Add Key”,你就应该看到已经添加的Key.
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

1.你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步:

首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库.填相关信息。点击“Create repository”按钮,就成功地创建了一个新的Git仓库。
目前,在GitHub上的这个仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:

$ git remote add origin git@github.com:FrizZzy/xxx.git

远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

下一步,就可以把本地库的所有内容推送到远程库上:

$ git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master

2.现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

首先,登陆GitHub,创建一个新的仓库:
们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件.

现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

$ git clone git@github.com:FrizZzy/xxx.git
$ cd gitskills
$ ls

三.分支管理

截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。

首先,我们创建xxx分支,然后切换到xxx分支:

$ git branch xxx
$ git checkout xxx
Switched to branch 'xxx'

然后,用git branch命令查看当前分支:

$ git branch
* xxx
  master

git branch命令会列出所有分支,当前分支前面会标一个*号。

切换分支:

$ git checkout master
Switched to branch 'master'

现在,我们把xxx分支的工作成果合并到master分支上:

$ git merge xxx

git merge命令用于合并指定分支到当前分支。

合并完成后,就可以放心地删除xxx分支了:

$ git branch -d xxx
Deleted branch xxx (was fec145a).

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

git log –graph命令可以看到分支合并图。

git log --graph

多人协作推送失败:

因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/xxx抓下来,然后,在本地合并,解决冲突,再推送:

$ git pull

git pull也失败了,原因是没有指定本地xxx分支与远程origin/xxx分支的链接,根据提示,设置xxx和origin/xxx的链接:

$ git branch --set-upstream xxx origin/xxx

再pull:

$ git pull

这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push:

    $ git commit -m "merge & fix hello.py"
    $ git push origin xxx

因此,多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交git commit -m “merge & fix hello.py”
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name origin/branch-name。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。


查看远程库信息,使用git remote -v

标签管理

在Git中打标签非常简单,首先,切换到需要打标签的分支上:

$ git branch
$ git checkout master

然后,敲命令git tag 就可以打一个新标签:

$ git tag v1.0

可以用命令git tag查看所有标签:

$ git tag

默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?
方法是找到历史提交的commit id,然后打上就可以了:

$ git log 
$ git tag v0.9 6224937 

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:

$ git tag -a v0.1 -m "version 0.1 released" 3628164

如果标签打错了,也可以删除:

$ git tag -d v0.1

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令git push origin tagname:

$ git push origin v1.0

或者,一次性推送全部尚未推送到远程的本地标签:

$ git push origin --tags

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

$ git tag -d v0.9

然后,从远程删除。删除命令也是push,但是格式如下:

$ git push origin :refs/tags/v0.9

四.克隆公共工程

点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己的账号下clone:

git clone git@github.com:FrizZzy/bootstrap.git
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值