本文最后更新于:2020年7月2日 晚上
* 今天看到了一份常用Git的命令总结,和大家分享一下~ *
git
仓库设计原理
- 工作区 Working Directory:就是本地建立git仓库的目录
- 版本库 Repository:工作区中的一个隐藏目录 .git,其主要存储了
- 暂存区 stage
- git自动创建的主分支master
- 指向主分支master的指针HEAD
- 暂存区 stage
git add
的作用是将文件修改添加到暂存区中git commit
的作用是将修改提交到当前分支上git commit
后,一次性将所有存放在暂存区的修改提交到当前分支上,此时工作区clean,暂存区clean
- git版本管理的不是文件,而是修改,或者说commit的来源只是暂存区中add的修改记录,所以版本回退会非常快
- HEAD指针
- HEAD指针记录当前最新的版本
创建仓库
mkdir RepositoriesName cd RepositoriesName git RepositoriesName
添加文件并提交到仓库
//参数m中可以简单说明本次修改的内容 git add filename git commit -m "wrote a readme.txt"
查看仓库当前状态
git status
查看文件修改内容
git diff filename
查看版本提交历史
git log
版本回退
//回退历史 //一个^表示一个版本 //回退到上一个版本 git reset --hard HEAD^ //回退到上上一个版本 git reset --hard HEAD^^ //回退到前一百个版本 git reset --hard HEAD-100 //重返未来 //回退到commit ID指定的版本 git reset --hard CommitID
查看命令历史,顺便找commit ID,重返未来必备
git reflog
撤销修改
当修改还没有从工作区提交至暂存区时,撤销工作区的修改,此时工作区与版本库一致
//checkout的作用就是用版本库的版本替换工作区的版本 git checkout -- filenanme
当修改已经从工作区add到暂存区时,先撤销暂存区的修改,再撤销工作区的修改,此时工作区与版本库一致
//先将暂存区的修改撤销 git reset HEAD filename //再将工作区的修改撤销 //checkout的作用就是用版本库的版本替换工作区的版本 git checkout -- filename
当修改已经从暂存区commit到版本库时,参考版本回退的方法
当修改已经从版本库push到远程库时,那就gg了。。。
删除文件
真心要删
git rm filename git commit -m "delete filename"
手抖删错
//checkout的作用就是用版本库的版本替换工作区的版本 git checkout -- filename
GitHub
连接远程仓库,设置SSHKEYS
用户根目录没有.ssh目录时,生成该目录
ssh-keygen -t rsa -C "email@example.com"
有该目录时,目录下的id_rsa是密钥,id_rsa.pub是共钥,将共钥复制到GitHub中的SSHKEYS中
- 这里得用cat把共钥输到屏幕上,要是在vim里直接复制,会有Linux和Windows换行符的差异,会报错(虽然这里直接是Linux环境。。但坑之前踩过。。)
克隆远程仓库到本地
git clone git@github.com:GitHubUserName/RepositoriesName.git
分支管理
创建分支
//先创建分支,再切换到分支上 git checkout -b branchName //相当于先创建分支 git branch branchName //再切换到分支上 git checkout branchName
查看当前分支
git branch
切换分支
git checkout branchName
合并制定分支branchName到当前分支 Fast forward模式
//此时默认使用Fast forward模式合并,分支不会产生commit git merge branchName
合并制定分支branchName到当前分支 普通模式
//分支会产生一个commit git merge --no-ff -m "merge with no-ff" branchName
删除分支
//此时分支必须是合并过的 git branch -d branchName //删除一个未合并过的分支 git branch -D branchName
解决合并冲突
首先查看合并冲突的文件,文件中用符号已经标记出了冲突的内容
将内容统一后,再提交
git add git commit -m "what"
此时合并自动完成
//git log --graph 可以看到合并分支图 git log --graph --pretty=oneline --abbrev-commit * c092d7a (HEAD -> master) and |\ | * 152fb2a (featrue) AND * | 6b80d04 & |/ * af8429a branch test * 89adff2 delete test.txt * 550c40a add new file test.txt * 34a5dd7 append GPL * f76a65d add distributed * d290302 wrote a readme.txr
现场暂存
git stash
现场暂存列表
git stash list
现场恢复
//现场恢复,同时将stash内容删除 git stash pop //相当于 //先现场恢复 git stash apply stash@{0} //再删除暂存的现场 git stash drop stash@{0}
查看远程库信息
git remote -v
从本地推送分支
//先尝试推送 git push origin branchName //如果失败了,说明远程分支比本地分支更新,本地的推送与远程库的最新版本有冲突,此时将远程库的最新版本拉下来 git pull //如果失败了,说明没有指定本地分支与远程分支的链接,此时建立设置链接 git branch --set-upstream branchName origin/branchName //如果pull成功,但是报merge合并失败,则需要解决合并冲突,并在本地提交 //没有冲突或者解决掉冲突后,向远程库推送 git push origin branchName
标签管理
查看标签
git tag
创建标签
//-a 指定标签名 //-m 指定说明文字 git tag tagName commitID
查看标签内容
git show tagName
推送本地标签到远程库
//推送某个标签 git push origin tagName //推送所有未推送到远程库的本地标签 git push origin --tags
删除标签
//删除本地标签 git tag -d tagName //删除远程标签 git tag -d tagName git push origin :refs/tags/tagName
图片来源:git-cheat-sheet
顺便把我的Github贴出来。。。虽然现在还没有什么东西。。。→_→
kongkongkkk的Github:Github
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!