git的使用

安装

yum install git-coreapt-get install git

查看版本git --version,我的是git version 1.7.9.5

配置

创建SSH Key:ssh-keygen -t rsa -C "424211755@163.com",一路回车,会在用户主目录/root/.ssh/id_rsa里面建立两个文件id_rsaid_rsa.pubid_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人,然后把id_rsa.pub打开复制后放到github网站上面。

测试是否连接上ssh -T git@github.com。如果显示You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。

然后配置自己的仓库:

git config --global user.name abc

git config --global user.email abc@163.com

如果你只是想创建本地仓库,不与远端的连接可以不用上面的配置,如果要管理远端仓库就需要上面操作。远端的仓库如github或者中国的www.oschina.net

如果有更多的需求可以尝试下面的配置:

ignore文件

如果不想加入管理一些文件,每次git status都会显示Untracked files 可以编写.gitignore文件,每行一个文件名或者目录。

配置git别名

起别名:git config --global alias.st status。以后git status 就可以省略为git st

取消别名:git config --global --unset alias.st

加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。

每个仓库的Git配置文件都放在.git/config文件中

当前用户的Git配置文件放在home/用户主目录下的一个隐藏文件.gitconfig

改颜色:git config --global color.ui true

git命令

提交修改

新建空目录,git init,产生.git目录 编写文件

git add a.txt b.txt

git commit -m "git add"

  • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区stage或index
  • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD,git commit 就是提交到这个分支

改了哪个文件,git status,显示修改过的文件名 根据上一步找到的文件名,git diff a.txt,查看具体怎么改的。 提交修改和提交新文件是一样的 git add a.txt 然后提交修改 git commit -m "second add" 查看提交的log,git log 或git log a.txt也可以加参数–pretty=oneline,显示在一行

用HEAD表示当前版本 上一个版本就是HEAD^,上上一个版本就是HEAD^^,上100个版本写成HEAD~100

回到某一个版本git reset --hard 00f7c 或者 git reset --hard HEAD^ 回到某一个版本后查看的git log只是前面的,不包括后面的版本号了,应该使用查看命令历史git reflog 没有添加过的文件状态是Untracked。

工作区:就是你在电脑里能看到的目录 版本库:工作区有一个隐藏目录.git,这个不算工作区 版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

git add把文件修改添加到暂存区

git commit把暂存区的所有内容提交到当前分支 需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改

撤销

1.命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态

2.如果提交到暂存区了, git reset HEAD readme.txt可以把暂存区的修改撤销掉,重新放回工作区

3.已经提交了不合适的修改到版本库时,想要撤销本次提交,可以版本回退,如果已经推送到远端就没法修改了

删除文件:

  • 确实要删除版本库的文件git rm test.txt,再提交git commit
  • 误删除,还原,因为版本库里还有git checkout -- test.txt,git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除

HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支 每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长 当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上 新提交一次后,dev指针往前移动一步,而master指针不变: 把dev合并到master上。直接把master指向dev的当前提交,就完成了合并,甚至可以删除dev分支

git branch 查看当前分支

git branch dev 创建dev分支

git checkout dev 切换到dev分支

git checkout -b dev也可以,创建dev分支,然后切换到dev分支 之前master分支的.gitignore文件不存在了 可以提交修改了,换到master后会发现没有变化 git merge dev 合并指定分支到当前分支

git branch -d dev 删除分支

clone 远程的仓库到本地git clone git@github.com:abc/firstgit.git,不用git init

把一个已有的本地仓库与远程仓库关联 git remote add origin git@github.com:abc/first.git

远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。 把本地库的所有内容推送到远程库上:git push -u origin master

以后可以:git push origin master

git push命令会将本地仓库推送到远程服务器。

git pull命令则相反,更新不需要添加其他东西。

查看当前分支:git branch

切换分支:git checkout master

git tag 查看所有标签

git tag v1.0 打新标签,默认为HEAD,也可以指定一个commit id

git tag -a <tagname> -m "blablabla" 可以指定标签信息;


Published 23 October 2015