git学习

安装git

windows可以安装Windows版的msysgit,下载地址,安装完成之后,在任意文件夹右键,就会有如下的按钮:

点击git bash here就可以进入git的命令行界面,以下操作均在命令行中进行。

git使用

git基础

这篇文章中描述的比较清楚,简单来说,git会在本地保存完整的版本库,一个git项目分为三个工作区:git仓库、暂存区、工作目录。工作目录就是文件夹中可见的供我们进行浏览和编辑的区域,修改后使用add命令,就会将修改后的版本放在暂存区,使用commit命令会将暂存区的文件提交到git仓库。

创建仓库

$ git init filename 在当前目录下创建一个文件夹并将文件夹作为仓库
$ git init 将当前文件夹作为仓库
仓库创建好后,会在目录下多一个.git 的文件夹
``

提交文件到版本库

在当前文件夹下创建readme.txt,随便写一些内容,然后执行add命令,就会将文件放到暂存区,然后执行commit命令 就可以报错到版本库了,commit命令必须使用-m参数,用来作为标注。add后面可以是一个文件,也可以是一个目录

$ git add readme.txt
$ git commit -m "wrote a readme file"
add命令

以下为git2.x的命令,可能与1.x不同

  • git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),以及被删除的文件。
  • git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的以及被删除的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
  • git add -A:等同于git add .
status命令

git status命令用于查看当前工作区以及暂存区的状态,执行该命令会告诉你哪些文件修改了但是还没放到暂存区(即Changes not staged for commit),哪些文件已经放在暂存区(即Changes to be committed)

diff命令

git diff 查看工作区与暂存区的区别
git diff HEAD 查看工作区与版本库的区别
git diff -- filename 查看指定文件的区别

log命令

git log 查看commit记录
git log --pretty=oneline 查看commit记录,在一行展示

版本回退
git reset --hard

git reset --hard HEAD 该命令用于将将版本库中的最新版本检出的工作区,并且清空暂存区
git reset --hard HEAD^ 版本库中的head指针指向上一个版本,并将其检出到工作区
git reset --hard HEAD~x 版本库中的head指针指向上x个版本,并将其检出到工作区
git reset --hard id 版本库中的head指针指向id指定的版本,并将其检出到工作区

git reflog

查看版本变化历史

版本检出
git checkout --file
命令git checkout -- readme.txt意思就是,从版本库检出readme.txt这个文件,如果缓存区有该文件,则优先从缓存区检出,否则从版本库检出。

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
删除文件
git rm
git commit

远程库

搭建git服务器

参考文章

创建库
a@server:/home/git$ su – git
$ cd /home/repo
$ mkdir teamwork.git
$ cd teamwork.git
$ git init - -bare
$ exit
管理库权限

进入管理员的gittosis-admin目录,将公钥usr@pc1.pub放在keydir目录下,并编辑gitosis.conf文件

[group gitosis-admin]
writable = gitosis-admin
members = xxx@xxx
[group hello]
writable = teamwork
members = usr@pc1.pub
添加远程库
1、生成ssh密钥,$ ssh-keygen -t rsa -C "youremail@example.com"
2、在github导入公钥
3、在github创建Repository
4、与本地库关联,$ git remote add origin git@github.com:yourAccount/xxxx.git
若非标准端口,可用git clone ssh://git@10.137.20.113:2222/root/test.git方式
5、推送 $ git push -u origin master

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

$ git push origin master
克隆远程库
$ git clone git@github.com:account/xxxxxx.git
分支管理
创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

查看分支:git branch

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

查看分支合并图:git log --graph --pretty=oneline --abbrev-commit

新建分支并切换到某版本  git checkout -b name-of-new-branch 版本id

参考内容

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513aefd77a99f4145f0a2c7a7ca057e7570000

comments powered by Disqus
京ICP备16019137号-1