#安装Git 1.看看系统有没有安装Git,有很多Linux会友好地告诉你Git没有安装,还会告诉你如何安装Git。
$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
2.一句代码直接完成Git的安装:
Linux:sudo apt-get install git
老一点的Linux:sudo apt-get install git-core
Mac:直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
Windows:msysgit是Windows版的Git,从https://git-for-windows.github.io下载
3.安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
$ git config --list
注意git config
命令的—global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
#创建版本库
- 创建文件目录
mkdir learngit
进入目录cd learngit
- 初始化
git init
- 把文件添加到仓库
git add readme.m
- 把文件提交到仓库
git commit -m "说明"
#时光机穿梭
版本回退
- 查看仓库当前状态
git status
- 查看具体修改了什么内容
git diff
- 查看历史记录
git log
- 只查看历史记录的版本号与注解
git log --pretty=oneline
- 把从当前版本回到上一个版本
git reset --hard HEAD^
- 把从当前版本回到上N个版本
git reset --hard HEAD~100
- 把从当前版本回到某个版本
git reset --hard 3628164
- 查看记录过的命令
git reflog
工作区和暂存区
管理修改
- 工作区和版本库里面最新版本的区别
git diff HEAD -- readme.txt
撤销修改
- 丢弃工作区的修改
git checkout -- readme.txt
- 暂存区的修改回退到工作区
git reset HEAD readme.txt
删除文件
- 从版本库中删除该文件
git rm
- 只查看历史记录的简单注解
git log --pretty=oneline --abbrev-commit
#远程仓库
- 创建SSH
$ ssh-keygen -t rsa -C "youremail@example.com"
添加远程库
- 关联GitHub
$ git remote add origin git@github.com:michaelliao/learngit.git
- 把本地库的内容推送到远程
$ git push -u origin master
第一次推送使用-u
参数
从远程库克隆
- 从远程库克隆
$ git clone git@github.com:michaelliao/gitskills.git
#分支管理
创建与合并分支
- 创建分支:
git branch Great
- 切换分支:
git checkout Great
- 创建、切换分支:
git checkout -b Great
- 查看当前分支:
git branch
- 合并某分支到当前分支:
git merge Great
- 删除分支:
git branch -d Great
解决冲突
- 分支合并图:
$ git log --graph
分支管理策略
- 合并分支,禁用“快速合并”
$ git merge --no-ff -m "merge with no-ff" dev
Bug分支
- 当前工作现场“储藏”起来:
$ git stash
- 工作现场“储藏例表:
$ git stash list
- 恢复,不删除“储藏”:
$ git stash apply
- 用来删除“储藏”:
$ git stash drop
- 恢复,同时删除“储藏”:
$ git stash pop
- 恢复指定的“储藏”:
$ git stash apply stash@{0}
Feature分支
- 强行删除末合并的分支:
$ git branch -D Great
多人协作
- 查看远程库信息:
$ git remote -v
- 推送master分支到master(Line),如果没有则创建:
$ git push origin master
- 在本地创建和远程分支对应的分支:
$ git checkout -b dev origin/dev
- 建立本地分支和远程分支的关联:
$ git branch --set-upstream dev origin/dev
- 先用
$ git pull
把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送。
#标签管理
创建标签
- 打一个新标签:
git tag -a 1.0 -m "说明"
- 查看所有标签:
git tag
- 在历史版本上打标签:
git tag 1.1 6224937
- 查看标签的详细信息:
git show V1.0
- 通过-s用私钥签名一个标签:
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a
操作标签
- 删除标签:
$ git tag -d v0.1
- 推送某个标签到远程:
$ git push origin v1.0
- 推送所有标签到远程:
$ git push origin --tags
- 删除远程标签:
$ git push origin :refs/tags/v0.9
#自定义Git
-
让Git显示颜色:
$ git config --global color.ui true
-
忽略特殊文件,配置`.gitignore``
-
设置别名``$ git config --global alias.st status`
-
配置文件,每个仓库的Git配置文件都放在
.git/config
文件中。 -
而当前用户的Git配置文件放在用户主目录下的一个隐藏文件
.gitconfig
中。
#搭建Git服务器 第一步,安装git:
$ sudo apt-get install git
第二步,创建一个git用户,用来运行git服务:
$ sudo adduser git
第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
第四步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
$ sudo git init --bare sample.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
$ sudo chown -R git:git sample.git
第五步,禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
第六步,克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
剩下的推送就简单了。