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 checkout
git config --global alias.ci commit
git 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