Git常用命令备忘录
Git是分布式版本控制系统,相对于SVN等集中式版本控制系统,其特点是没有集中式版本控制系统的“中央服务器”,每台电脑保存有完整的版本库,这样在没有网络的情况下也能进行分支创建、切换等操作,同时也避免了中央服务器故障而导致的风险。
基本操作
创建仓库,即创建.git文件夹:
git init
文件添加到仓库,对应文件或目录生成快照索引,放入暂存区,后续此文件会被监控:
git add file.txt
git add -f app.class //强制添加被gitignore的文件
文件提交,将已经在暂存区的索引信息提交到仓库:
git commit -m “some msg” file.txt
git commit -am //提交已跟踪文件到暂存区,并提交到仓库
提交日志:
git log --pretty=oneline //pretty=onelne表示一行显示,graph分支合并图
git log中commit id表示唯一的版本,HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上个版本,HEAD~100表示上100个版本,以此类推。
命令历史:
git reflog
比较版本差异:
git diff HEAD -- file.txt
查看工作区状态:
git status
撤销修改(直接丢弃工作区的文件):
git checkout -- file.txt
版本回退,也可以将暂存区的文件退到工作区:
git reset –hard <commit id> //文件已修改,并保存到暂存区未commit
场景1:未保存到暂存区,直接替换工作区文件,用命令git checkout -- file。
场景2:保存到暂存区未commit,想要丢弃,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
保存到暂存区未commit(场景2)可以直接用:git reset –hard head
删除文件:
git rm (需要commit)
远程仓库
创建SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
用户目录下游.ssh,其中id_rsa和id_rsa.pub分别代表私钥和公钥,公钥可以上传到github的SSH Keys页面
克隆远程仓库(默认clone最新分支,如果要切换其他分支,需要切换):
git clone
本地仓库和关联远程仓库(仅做关联):
git remote add origin git@server-name:path/repo-name.git
第一次推送远程仓库(-u关联本地master和远程mater):
git push -u origin master
后续推送远程仓库:
git push origin master
分支相关
查看分支:
git branch
创建分支:
git branch <name>
切换分支:
git checkout <name>
创建+切换分支:
git checkout -b <name>
合并分支到当前分支:
git merge <name> //合并到当前分支
git merge --no-ff -m "merge with no-ff" dev //禁止Fast forward,使用普通模式合并,合并后有历史分支,能看出来曾经做过合并,fast forward看不出来曾经做合并。
删除分支:
git branch -d <name>
git branch -D <name> //-D表示强制删除分支,未合并分支内容会丢失
暂存工作区:
git stash
恢复工作区:
git stash pop
查看远程仓库信息:
git remote -v
从远程分支拉取:
git pull
本地分支推送远程:
git push origin branch-name
本地创建和远程对应的分支:
git checkout -b branch-name origin/branch-name
建立本地分支和远程分支关联:
git branch --set-upstream branch-name origin/branch-name
整理提交历史线:
git rebase
标签相关
标签是为了标记某些状态的版本,取标签就是取出对应打标签时刻的历史版本。
打标签:
git tag v1.0
查看所有标签:
git tag
对某次提交打标签:
git tag v0.9 f52c633
查看标签信息:
git show v0.9
指定标签信息:
git tag -a <tagname> -m "..."
推送本地标签到远程:
git push origin <tagname>
推送全部未推送的本地标签:
git push origin --tags
删除一个本地标签:
git tag -d <tagname>
删除一个远程标签:
git push origin :refs/tags/<tagname>
其他
配置别名:
git config –global alias.st status
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 lg
配置文件:
配置git时,加上—global针对当前用户起作用,如果不加,只对当前仓库起作用
每个git仓库配置文件都放在.git/config文件夹
.gitignore文件(要放到版本库):
github已经写好的gitignore文件:https://github.com/github/gitignore
Git Cheat Sheet:https://www.git-tower.com/blog/git-cheat-sheet/