git命令总结
git命令总结
基本命令
- git init 创建版本库
- git add filename 将文件添加到版本库的暂存区
- git commit -m "版本描述" 将文件从暂存区提交到版本库的当前分支
- git status 查看当前仓库状态
- git diff filename 查看文件不同版本的区别
- git log 查看历史记录,显示从最近到最远的提交日志
- git log --pretty=oneline
- git reset --hard head^ 回退到上一个版本
- git reset --hard head^^ 回退到上上个版本
- git reset --hard head~100
- git reset --hard commit_id 指定回退到某个版本
- git reflog 记录每一次命令,可用来查找未来版本的commit_id
- git diff head -- filename 查看工作区和版本库里最新版本的区别
- git checkout -- filename 丢弃工作区的修改,即使用版本区的版本替换工作区的版本
- git reset head filename 将暂存区的修改撤销掉,重新放回工作区
- git rm filename 从版本库中删除文件
远程仓库
1 创建ssh key
- ssh-keygen -t rsa -c "**********@163.com"
2 进入 https://github.com/settings/keys
3 在key文本框中粘贴id_rsa.pub中的内容
添加远程仓库
在github中创建一个新的仓库
在repository name填入learngit,点击添加
按照提示在本地的learngit仓库运行命令:
- git remote add origin https://github.com/username/learngit.git
把本地库所有内容推送到远程库
- git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
自此,可以通过命令:git push origin master将本地提交的最新修改推送到github中了。
从远程库克隆
1 登录github,创建一个新的仓库:gitskills
我们勾选initialize this repository with a readme,这样github会自动为我们创建一个readme.md文件。
2 git clone https://github.com/username/gitskills.git
git clone git@github.com:username/gitskills.git(推荐使用)
分支管理
每次提交,git都把它们串成一条时间线,这条时间线就是一个分支。
截止到目前,只有一条时间线,在git里,这个分支叫主分支,即master分支。
head严格来说不是指向提交,而是指向master,master才是指向提交的,
head指向的就是当前分支。
一开始的时候,master分支是一条线,git用master指向最新的提交,再用head指向master,就能确定当前分支,以及当前分支的提交点。
当我们创建新的分支,例如dev时,git新建了一个指针叫dev,指向master相同的提交,再把head指向dev,就表示当前分支在dev上
1 创建分支、合并分支
- git checkout -b 新分支 创建并切换到新分支
相当于以下两个命令:
- git branch dev
- git checkout dev
- git branch 查看当前分支
- git checkout master 切换回naster分支
- git merge dev 将dev合并到当前分支
- fast-forward信息:快进模式,直接把master指向了dev的当前提交
- git branch -d dev 删除dev分支
更科学的切换命令:
- git switch -c dev 创建并切换到新的dev分支
- git switch master 切换到已有的master分支
合并冲突
创建新的分支feature1,是master分支和feature1分支各自有新的提交,这种情况下,git无法执行快速合并,只能试图把各自的修改合并起来,该合并有可能会有冲突
git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
- git log --graph --pretty=oneline --abbrev-commit 查看分支的合并情况
分支管理策略
通常,合并分支时,如果可能,git会用fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
强制禁用fast forward模式,git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
--no-ff:表示禁用fast forward
- git merge --no-ff -m "merge with no-ff" dev 合并分支,禁用fast forward
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
- git stash 将当前工作现场储藏起来,等回复现场后继续工作
- git stash list 查看工作现场去了哪
- git stash pop 恢复现场并将stash内容删除(相当于git stash apply+git stash drop)
- git stash apply stash@{0} 恢复指定的stash
- git cherry-pick 4c805e2 复制一个特定的提交到当前分支
- git branch -d feature-vulcan 强制删除分支
- git remote -v 查看远程库的信息
- git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支
当other的最新提交和自己的有冲突时:
- git pull 将最新提交从远程抓下来
- git branch --set-upstream-to=origin/dev dev 指定dev和origin/dev的连接
- git rebase
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
标签管理
切换到指定分支
- git tag v1.0 创建一个新的标签
- git tag 查看所有标签
- 默认标签是打在最新提交的commit上的
git tag v0.9 f52c633
标签不是按时间顺序列出,而是按字母排序的
- git shwo tagname 查看标签信息
- git tag -a v0.1 -m "version 0.1 released" 1094adb 创建带有说明的标签
注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
- git tag -d tagname 删除标签
- git push origin tagname 推送某个标签到远程
- git push origin --tags 一次性推送全部尚未推送到远程的本地标签
- git push origin :refs/tags/v0.9 删除远程标签(要将标签先在本地删除)
git关联码云
1 注册登录码云,上传ssh公钥
2 创建仓库用于与本地关联
- git remote -v 查看远程库信息
- git remote rm origin 删除原有的远程库
- git remote add gitee git@gitee.comusername/learngit.git 关联码云远程库
- git remote add github git@github.com:username/learngit.git 关联github远程库
- git push 远程库 本地库 推送到远程库
gui:sourcetree
- $ git config --global alias.st status 配置别名 git st=git status
- $ git config --global alias.co checkout
- $ git config --global alias.ci commit
- $ git config --global alias.br branch
- $ git ci -m "bala bala bala..."
- 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配置文件都放在.git/config文件中
当前用户的git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
搭建git服务器
1 安装git: sudo apt-get install git
2 创建一个git用户,用来运行git服务:sudo adduser git
3 创建证书登录
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
4 初始化git仓库
先选定一个目录作为git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
- sudo git init --bare sample.git
把owner改为git:
- $ sudo chown -r git:git sample.git
5 禁止shell登录
编辑/etc/passwd文件
找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
6 克隆远程仓库
- git clone git@server:/srv/sample.git
上一篇: .net网站上传图片换电脑不显示
下一篇: Unix文件系统和pwd命令实现详解