git学习笔记
一,基本设置
- 初始化设置
 
git config --global user.name "Your Name"  
git config --global user.email "email@example.com"  
--global参数,表示你这台机器上所有的Git仓库都会使用这个配置。
- 创建版本库repository
通过git init命令把当前目录变成Git可以管理的仓库。 
二,常用命令
- 把文件添加到仓库   
git add readme.txt
强制添加git add -f readme.txt - 把文件提交到仓库
git commit -m "description"-m后面输入的是本次提交的说明 - 显示从最近到最远的提交日志 
git log
使用--pretty=oneline参数可简化为一行 - 上一个版本就是
HEAD^上上一个版本就是HEAD^^或写成HEAD~10 - 回退到上一个版本 
git reset --hard HEAD^
回退到任意版本git reset --hard <commit id前几位> - 查看命令记录  
git reflog - 查看状态
git status - 查看工作区和版本库里面最新版本的区别 
git diff HEAD -- readme.txt - 丢弃工作区的修改 
git checkout -- file - 切换到另一个分支 
git checkout master - 把暂存区的修改撤销掉 
git reset HEAD <file> - 删除文件 
git rm test.txt - 创建dev分支 
git checkout -b dev相当于git branch dev和git checkout dev
也可以用git switch -c dev - 查看当前分支 
git branch - 合并指定分支到当前分支 
git merge dev--no-ff参数,表示禁用Fast forward合并模式(看不出来曾经做过合并) - 删除dev分支 
git branch -d dev
强行删除git branch -D dev - 查看分支合并图  
git log --graph
或者git log --graph --pretty=oneline --abbrev-commit - 存储当前当前工作现场 
git stash
之后用git stash list命令查看
恢复方法一git stash pop恢复的同时把stash内容也删了
恢复方法二git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除 - 复制一个特定的提交到当前分支 
git cherry-pick 4c805e2 - 分叉的提交现在变成一条直线  
git rebase 
三,远程仓库
- 创建SSH Key 
ssh-keygen -t rsa -C "youremail@example.com" - 在远程仓库Add SSH Key中添加id_rsa.pub文件的内容
 - 本地关联远程库 
git remote add origin git@github.com:username/filename.git
远程库的名字就是origin,这是Git默认的叫法,这个名字一看就知道是远程库。 - 把本地库的内容推送到远程,用
git push origin master命令,实际上是把当前分支master推送到远程。
第一次推送master分支时,加上了-u参数 - 克隆一个本地库 
git clone git@github.com:username/filename.git - 查看远程库的信息 
git remote
显示更详细的信息git remote -v - 你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,用这个命令创建本地dev分支: 
git checkout -b dev origin/dev - 推送的提交有冲突的解决办法: 先用
git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
若git pull 失败,用第9条的命令创建链接关系,之后再git pull - 设置dev和origin/dev的链接 
git branch --set-upstream-to=origin/dev dev - 删除已有的远程库  
git remote rm origin 
四,标签管理
- 默认标签打在最新提交的commit上 
git tag v1.0 - 查看所有标签  
git tag - 找到历史提交的commit id   
git log --pretty=oneline --abbrev-commit - 给对应的commit id打标签 
git tag v0.9 f52c633 - 查看标签信息  
git show <tagname> - 创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a v0.1 -m "version 0.1 released" 1094adb - 删除标签 
git tag -d v0.1 - 推送某个标签到远程 
git push origin v1.0 - 一次性推送全部尚未推送到远程的本地标签  
git push origin --tags - 删除远程标签:先从本地删除 
git tag -d v0.9
之后从远程删除git push origin :refs/tags/v0.9 
五,其他命令
- 让Git显示颜色  
git config --global color.ui true - 忽略特殊文件
 
在Git工作区的根目录下创建一个特殊的.gitignore文件,
然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
忽略文件的原则是:
1.忽略操作系统自动生成的文件,比如缩略图等;
2.忽略编译生成的中间文件、可执行文件等,
   也就是如果一个文件是通过另一个文件自动生成的,
   那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
3.忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
例如:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa
- 检查.gitignore规则 
git check-ignore -v App.class - 配置别名 例如以st表示status 
git config --global alias.st status
其他git config --global alias.co checkoutgit config --global alias.ci commitgit config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
把暂存区的修改撤销掉
git config --global alias.last 'log -1'
显示最后一次提交信息
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 
六,搭建Git服务器(Ubuntu或Debian)
- 安装git sudo apt-get install git
 - 创建一个git用户,用来运行git服务 sudo adduser git
 - 创建证书登录 所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
 - 初始化Git仓库
在/srv目录下输入命令 sudo git init –bare sample.git
然后,把owner改为git sudo chown -R git:git sample.git - 禁用shell登录
 
编辑/etc/passwd文件
将 git:x:1001:1001:,,,:/home/git:/bin/bash
改为 git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
- 克隆远程仓库 git clone git@server:/srv/sample.git