Git是目前世界上最先进的分布式版本控制系统(没有之一)。使用Svn的请参考《版本控制-svn服务器搭建和常用命令(centos 6.3)》,下面介绍Git的常用命令

常用命令

  简单版

  升级版

  其他

服务器搭建

  本地服务器搭建

  Gitolite搭建

  


  一、简单版

  1、创建版本库

git init

  2、新增修改,新增文件到缓存区

git add

  3、比较文件的差异

git diff

  4、查看仓库状态

git status

  5、从缓存区提交修改(新增)到版本库

git commit -m 'add a.txt'

  6、查看提交日志

git log (--pretty=oneline)

  7、HEAD表示当前版本,HEAD^表示上个版本,HEAD^^上上个版本,HEAD~100表示网上100个版本

  8、更新到指定版本(没有撤销本地修改)

git reset --hard HEAD^
git reset --hard 3628164 # 能区分一个版本的commit id即可

  9、查看每一次命令

git reflog

  10、撤销工作区的修改

git checkout --file  

假设错误修改了readme.txt,并且git add到了缓存区

git reset HEAD readme.txt   # 回到最新版本,撤销缓存区的修改
git checkout --readme.txt # 撤销本地修改

  11、删除文件

删除本地文件直接rm

删除版本库文件

git rm a.txt
git commit -m‘rm a.txt’

删除暂存区文件

git rm --cache a.txt

git checkout HEAD(a.txt)  # 会清除工作区和暂存区的修改

  二、升级版

  1、从github添加远程仓库(origin是远程库默认名称,可以更改)

git remote add origin git@github.com:***/learngit.git

  2、把本地的所有修改推送到远程库(push是用本地的master分支,-u是表示第一次将远程库的master和本地的master关联)

git push (-u) origin master

  3、克隆一个仓库(支持ssh和https协议,ssh原生且最快)

git clone git@github.com:***/gitskills.git

  4、创建一个分支并切换到该分支(git鼓励使用分支)

git checkout -b dev

等于两个命令

git branch dev
git checkout dev

  5、分支命令

查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch –d(D) <name>
删除远程分支:git push origin :serverfix

  6、查看分支合并情况日志

git log –graph

git log --graph --pretty=oneline --abbrev-commit

  7、分支管理策略

master是稳定版本,开发的在其他分支上,稳定后合并到master。

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward(默认)合并就看不出来曾经做过合并

git merge --no-ff -m "merge with no-ff" dev
git log --graph --pretty=oneline --abbrev-commit

  8、挂起工作场景

git stash    # 挂起
git stash list # 查看 git stash pop # 恢复并删除
等于
git stash apply && git stash drop

  9、多人协作

用下面命令推送自己的修改

git push origin branch-name

如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用下面命令推送就能成功

git push origin branch-name

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令

git branch --set-upstream branch-name origin/branch-name

  10、标签操作

git tag <name>    # 新建标签,默认为HEAD,可以指定commit id
git tag -a <tagname> -m "blablabla..." # 指定标签信息
git tag -s <tagname> -m "blablabla..." # 用PGP签名标签名
git tag # 查看所有标签
git show <tagname> # 看到说明
git tag -d <tagname> # 本地删除标签
git push origin <tagname> # 推送标签到远程仓库
git push origin --tags # 一次性推送所有标签到远程仓库

PGP签名的标签是不可伪造的,因为可以验证PGP签名。验证签名的方法比较复杂

要删除远程仓库的标签需要使用

git tag -d <tagname>
git push origin :refs/tags/<tagname>

  三、其他

  1、忽略文件

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。我们并不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

  2、配置别名

git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch

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

  四、搭建本地Git服务器

详情可参考廖雪峰官方网站 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  1、安装git

yum install git -y

[root@master git]# git version
git version 1.7.1

  2、新建git账号

[root@master git]# useradd git

[root@master git]# passwd git

[root@master git]# mkdir /data1/git

  3、生成ssh key

[root@master git]# su - git

[git@master ~]$ ssh-keygen -t rsa

[git@master .ssh]$ cd ~/.ssh/

[git@master .ssh]$ touch authorized_keys

[git@master .ssh]$ chmod 600 authorized_keys 

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。  

  4、初始化git仓库

切回Root账户

[root@master ~]# cd /data1/git/

[root@master git]# git init --bare project.git
Initialized empty Git repository in /data1/git/project.git/ [root@master git]# chown -R git: /data1/git/

  5、禁用shell登陆

处于安全考虑一般禁用git账户被远程登陆shell。修改/etc/passwd

[root@master git]# vim /etc/passwd

将 git:x:502:502::/home/git:/bin/bash  修改为
git:x:502:502::/home/git:/usr/bin/git-shell
[root@master git]# su - git
fatal: What do you think I am? A shell?

  6、其他地方克隆仓库

现将公钥添加到 authorized_keys文件中

git clone ssh://git@master:322/data1/git/project.git

管理公钥可以使用 Gitosis ,因为authorized_keys文件大了很难管理。管理权限请参考下面

  五、Gitolite搭建教程

参考官网 https://git-scm.com/book/zh/v1/服务器上的-Git-Gitolite

  1、前期准备

git服务器git@10.16.4.14,git admin机器git@10.16.4.15

root@10.16.4.14$ useradd git
root@10.16.4.14$ passwd git
root@10.16.4.14$ su - git admin git@10.16.4.15
root@10.16.4.15$ useradd git
root@10.16.4.15$ passwd git
root@10.16.4.15$ su - git
root@10.16.4.15$ ssh-keygen -t -P ''

send git.pub to git@10.16.4.14:322/home

  2、Admin使用

git clone

git@10.16.4.15 git clone ssh://git@10.16.4.14:322/gitolite-admin

add user

1)获取用户的public ssh key,例如test@10.1.32.164.pub
2)将`1`的pub存放到git@10.16.4.15 /home/git/gitolite-admin/keydir 文件夹下
3)修改/home/git/gitolite-admin/conf/gitolite.conf,赋予`1`用户的仓库权限
4)git add && git commit -m 'add user test...' && git push origin master
5)登陆test@10.1.32.164,git clone `3`中的仓库

  3、权限控制

参考 https://git-scm.com/book/zh/v1/服务器上的-Git-Gitolite

参考 http://perthcharles.github.io/2015/08/24/setup-gitolite-service-git-1

  4、解决密码过期问题

[git@Dev_10_16_4_15 gitolite-admin]$ git push origin master
WARNING: Your password has expired.
Password change required but no TTY available.
fatal: Could not read from remote repository. Please make sure you have the correct access rights
and the repository exists.

解决命令

[root@Dev_10_16_4_14 ~]# chage -M 999 git

centos上搭建git服务--4的更多相关文章

  1. centos上搭建git服务--3

    前言:当我们想要实现几个小伙伴合作开发同一个项目,或者建立一个资源分享平台的时候,GIT就是一个很好的选择.当然,既然是一个共有平台,那么把这个平台放到个人计算机上明显是不合适的,因此就要在服务器上搭 ...

  2. centos上搭建git服务--2

    在 Linux 下搭建 Git 服务器   环境: 服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.window ...

  3. Centos上搭建git服务

    1.安装Git $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel $ yum ...

  4. CentOs上搭建git服务器

    CentOs上搭建git服务器 首先安装setuptools wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0 ...

  5. 用Gogs在Windows上搭建Git服务

    1.下载并安装Git,如有需求,请重启服务器让Path中的环境变量生效. 2.下载并安装Gogs,请注意,在Windows中部署时,请下载MiniWinService(mws)版本. 3.在Maria ...

  6. CentOS 上安装 GIT 服务

    获取 YUM 中 GIT 信息:    yum info git 查看当前 GIT 的版本:    git --version    或    git version 卸载当前版本的 GIT:     ...

  7. window服务器上搭建git服务,window server git!!!

    先给大家看一个高大上的,这是我给我公司配置的,小伙伴们都说好! 阿里云的2012server 基于这篇大神的教程,我把服务端搭建好了. 传送门,当然我还是自己做个笔记的好. 1.下载java,并安装 ...

  8. 在centos上搭建Git服务器

    第一步:先安装一些相关依赖库和编译工具 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum in ...

  9. CentOS上安装GitBlit服务

    简单介绍 在上一篇文章中,已经简单的介绍了如何在CentOS的服务器上搭建git服务器.但是这种方式实现的服务器功能比较弱,操作起来也比较繁琐.在网上搜索了一圈,感觉Gitblit比较符合我的需求.接 ...

随机推荐

  1. iOS:通信录(完成)(18-01-18更)

    1.读取通信录 1).9.0以前:AddressBook 2).9.0以后:Contacts 2.调用通信录UI(不弄) 1).9.0以前:AddressBookUI 2).9.0以后:Contact ...

  2. MVC——MVP——MVVM

    MVC什么样? 从这个图中可以清楚的看到: View:视图层——这里是用户与之交互的界面. Model:模型层——这里面主要就是业务数据,并把数据提供给视图层 Controller:控制器——他的主要 ...

  3. 在angular7中创建组件/自定义指令/管道

    在angular7中创建组件/自定义指令/管道 组件 使用命令创建组件 创建组件的命令:ng generate component 组件名 生成的组件组成: 组件名.html .组件名.ts.组件名. ...

  4. 在linux系统中用docker搭建ss

    首先呢,你的先有一台自己的服务器把,这个就不多赘述了,我自己买了一台国外的VPS. 一.docker的安装 首先我们来看下服务器的版本信息: cat /etc/redhat-release //Cen ...

  5. 16JavaScript for循环

    1.JavaScript 循环 如果希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的. 我们可以这样输出数组的值: 一般写法: document.write(cars[0] ...

  6. ajax与jsonp定义及使用方法

    ajax 定义 ajax技术的目的是让javascript发送http请求,与后台通信,获取数据和信息. ajax通信的过程不会影响后续javascript的执行,从而实现异步. 同步和异步 现实生活 ...

  7. 完美解决 Cydia 不能上网

    国行手机比美版.港版.韩版手机新增了网络授权的功能,iOS 10 及以上系统版本,任何应用首次打开,如果有请求网络的行为,都会提示网络请求授权的对话框. 首次打开 Cydia 并没有提示网络请求授权的 ...

  8. cookie,session,token

    发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应,  尤其是我不用 ...

  9. day 93 Django学习之django自带的contentType表

    Django学习之django自带的contentType表   通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...

  10. Linux下c语言实现myod

    首先根据od要输出16进制的功能,以及c语言中文件的打开读取等函数,编写了如下代码. #include<stdio.h> #define N 1000 int main() { int c ...