Git常用命令
Posted isky0824
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git常用命令相关的知识,希望对你有一定的参考价值。
https下,git push、git pull每次需要输入密码
cd进入该项目路径,输入命令:git config --global credential.helper store,之后再次push、pull输入的密码会自动保存在本地,git就不会再提示输入密码了。
开始之前
ssh-keygen -t rsa -C "isky0824@qq.com" 创建ssh-key,将id_rsa.pub内容复制到github
git config (--global) user.name "isky0824" 设置名称
git config (--global) user.email "isky08240824@qq.com" 设置邮箱
正式开始
本地操作(HEAD表示当前最新的Commit)
git init 初始化一个空的git仓库
git add file 添加单个文件
git add ./-A 添加所有的文件(修改的、删除的、新加的)
git add -u 添加修改的文件和删除的文件(不包含新加的文件)
git commit -m "备注" 将内容提交到缓存区
git status 查看当前缓存区中的状态
第一次讲本地文件夹导入到github
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:isky0824/work.git
git push -u origin master
git diff file 查看工作区中该file与暂缓区中该file的差异,如果还没add到暂缓区,则查看工作区本次修改的差异,如果没有修改,则不作任何输出
git diff dev file 查看工作区中该file与另一分支dev中该file的差异
git diff --cached <commit> file 查看缓存区中该file与版本库中某次提交中(默认HEAD)该file的差异
git diff HEAD file 查看工作区中该file与版本库HEAD指向的版本中该file的差异
git log <--graph> 查看缓存区中的历史提交(查看分支合并图)
git log -1 显示最后一次提交的log
git log --pretty=oneline 单行查看(简洁版)
git reflog 显示每次操作的命令和状态
git reset --hard HEAD^ 回滚到当前版本HEAD的前一次提交
git reset --hard HEAD~5 回滚到当前版本HEAD的前五次提交
git reset --hard 9527 回滚到commit id为9527的提交
git checkout -- file/. 撤销工作区的修改,回到HEAD版本
git reset HEAD . 将暂缓区中的所有file放回工作区(删除暂缓区所有file)
git reset HEAD file 将暂缓区中的该file放回工作区(删除暂缓区中的该file)
1、文件还没有放到缓存区,该命令将撤销工作区该file的修改内容,回到版本库的最新状态
2、文件已经提交到缓存区,然后又修改了,该命令将撤销第二次修改,file将回到缓存区的状态
git rm file 删除版本库里的file,要执行git commit
远程操作
git clone git://github.com/isky0824/test.git 克隆远程仓库到本地
git clone -b dev git://github.com/isky0824/test.git 克隆远程仓库的dev分支到本地
git remote add origin url 将本地仓库与远程关联
git remote <-v> 查看远程的名称,使用-v可以查看详细信息
git remote show origin 显示远程origin详细信息
git remote rename a b 将远程的名字从a改为b
git push -u origin master 第一次将本地master推送至远程的master,并关联起来
git pull 从远程仓库更新所有分支,并merge到当前分支的工作区
git pull origin dev:master 从远程仓库更新dev分支,并merge到master分支
git fetch 从远程仓库更新所有分支,不merge到当前分支的工作区
git fetch origin master 从远程仓库更新master分支到本地仓库
git fetch 与 git pull的区别:
相同点:
1、这2个命令都会将远程仓库更新到本地仓库;
2、这2个命令都会从远程仓库更新本地仓库中的所有分支,而不仅是当前分支;
不同点:
1、前者会将远程仓库更新到本地仓库,但不会merge到任何分支的工作区;
2、后者不仅会将远程仓库更新到本地仓库,还会merge到当前分支的工作区,但不会merge到其他分支的工作区(切换到其他分支后,可以使用git merge进行手动merge);
git clean 清理那些没有track的文件和路径,-n 显示将要删除的文件和目录, -x 删除忽略文件已经对git来说不识别的文件,-d -----删除未被添加到git的路径中的文件,-f -----强制运行
分支操作
master分支应该是非常稳定,仅用于发布新版本,不能在上面干活;团队开发都在dev分支上(测试也可以),每个人从dev创建自己的dev-my分支,然后往dev合并;dev不稳定,等开发测试完成后,准备发布的时候,再将dev合并到master,然后在master分支发布1.0版本。
git branch 查看所有本地分支,当前分支的前面会标一个*号
git branch -r 查看所有远程分支
git branch -a 查看所有分支(本地+远程)
git branch dev 创建dev分支
git branch -d/-D dev 删除本地dev分支(-D是强行删除,用于删除没有合并想要丢弃的分支)
git branch -r -d/-D dev 从本机缓存中删除origin/dev分支,不删除服务器的origin/dev分支
git push origin --delete dev 删除远程dev分支(不删除本地dev分支)
git checkout dev 切换到dev分支(新clone的项目,一般只能看到master分支,如果直接创建dev分支,那么是基于master创建的dev,而且这个dev还没有和origin/dev关联,所以最好是先执行git checkout dev或者git checkout -b dev origin/dev,此命令会创建切换到dev并关联origin/dev)
git checkout -b dev 创建dev分支,并切换到dev分支
git checkout -b dev origin/dev 创建本地dev,并和origin/dev关联
git branch --set-upstream dev origin/dev 将本地新创建的dev与origin/dev关联起来,如果origin/dev不存在,则创建origin/dev(此条好像已作废,下条可以实现相同效果,抽空试试)
git push --set-upstream origin dev 将本地新建的dev分支推送到origin(会新建dev分支)
git merge <--no-ff> dev 将dev分支合并到当前分支(可能是master),如果合并遇到冲突,需要手动修改冲突,然后git add filename,并git commit -m "..."提交。--no-ff表示执行正常合并,在Master上执行合并时建议使用--no-ff参数,这样会在Master分支上生成一个新节点(如左图,否则如右图)。为了保证版本演进的清晰,我们希望采用这种做法。
git merge dev --no-ff -m "备注" 将dev分支合并到当前分支(禁用Fast-forward模式,会自动生成一个commit,删除dev分支后,可以保留分支信息)
git merge --abort 撤销merge
git reset --HARD merge完成后有个bug,可以回到merge之前的版本
git stash 存储当前的工作进度,以便于后期恢复到当前进度
git stash list 查看所有暂存的工作进度
git stash pop 将最后一次暂存的工作进度恢复,然后删除暂存记录
git stash apply (stash@{0}) 将暂存的工作进度恢复,但是并不删除暂存记录
git stash drop (id) 删除暂存记录
git stash clear 清空暂存记录
git rebase 把本地没有push的分叉提交历史整理成直线,使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
标签管理
git tag v1.0 (123456) 创建标签v1.0(默认为HEAD打标签,这里为12345这次commit打标签)
git tag -a v1.0 -m "备注" (123456) 创建标签并打上备注
git tag 查看所有标签
git show v1.0 查看v1.0标签的详细信息
git tag -d v1.0 删除本地标签v1.0
git push origin :refs/tags/v1.0 删除远程标签v1.0(需要先删除本地标签v1.0)
git push origin v1.0 将标签v1.0的commit提交到远程
git push origin --tags 将所有本地未推送的标签推送到远程
其他不重要
git config (--global) color.ui true git ui将适当地显示不同的颜色
git config (--global) alias.st status 告诉git,用st表示status
git config (--global) alias.co checkout 告诉git,用co表示checkout
git config (--global) alias.ci commit 告诉git,用ci表示commit
git config (--global) alias.br branch 告诉git,用br表示branch
git config (--global) alias.unstage ‘reset HEAD‘ 告诉git,用unstage表示reset HEAD
git config (--global) alias.last ‘log -1‘ 告诉git,用last表示log -1
阮一峰:http://www.ruanyifeng.com/blog/2014/06/git_remote.html
tig命令:https://juejin.im/post/5afabcb1f265da0b886d92b6
以上是关于Git常用命令的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段
GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段