2021-03-28

Git常用指令精简集合

//基本的本地库相关记录操作

git add . //该文件夹下所有文件全部git add
git add readme.txt //加入readme.txt一个文件
git commit -m "balabalabala" //-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
git status //显示工作区状态
git diff //如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
git log //查看历史记录
git log --pretty=oneline //git log的简洁显示版,前面是commit id(版本号)
//在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
git reset --hard HEAD^ //回退到上一个版本
git reset --hard <commit id> //跳转到这个版本号,可进可退,本质是改变HEAD指针指向的版本
//你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
git reflog //用来记录你的每一次命令,可查看历史commit id
//在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令

git diff HEAD -- readme.txt //可以查看工作区和版本库里面最新版本的区别(前提是都在看readme.txt)
git checkout -- readme.txt //linux
git restore readme.txt //windows
git restore --staged readme.txt//windows
//意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
//一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
上述命令为 git restore readme.txt
//一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
上述命令为 git restore --staged readme.txt
//总之,就是让这个文件回到最近一次git commit或git add时的状态。
git reset HEAD <file> //可以把暂存区的修改撤销掉(unstage),重新放回工作区
git rm readme.txt + git commit //从版本库中删除该文件,那就用命令git rm删掉,并且git commit
git checkout -- test.txt //不小心把readme.txt删掉了,删错了,但是版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
git restore test.txt //windows下与git checkout – test.txt效果相同

//github远程库相关

git remote //查看远程库的信息
git remote -v //示更详细的远程库信息
git remote add origin git@github.com:<name>/learngit.git//在本地文件夹中关联在github创建的learngit.git远程库
git push -u origin master
//把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
//由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master //从现在起,只要本地作了提交,就可以通过命令:$ git push origin master 把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
git push origin < branch-name | dev> //如果要推送其他分支,比如dev,就把上面一条改成这个
git remote -v //查看远程库信息
git remote rm <远程库的名字 | origin>//此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。
//注意,在本地git commit后再git push到远程仓库才有效。git push是push的commit后HEAD->master版本库中的内容
git clone < 仓库地址URL | git@github.com:<\name>/gitskills.git> //从远程库克隆到本地.要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。Git支持多种协议,包括https,但ssh协议速度最快。
git checkout -b branch-name origin/<\branch-name>//在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致
git branch --set-upstream branch-name origin/branch-name//建立本地分支和远程分支的关联

//创建分支相关

git branch <分支名称 | dev> //创建分支dev
git checkout <目标分支 | dev>//切换到目标分支dev
git switch <目标分支 | dev> //同上一条命令
git checkout -b <目标分支 | dev> //git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:$ git branch dev 以及 $ git checkout dev
git switch -c <目标分支 | dev>//同上一条命令
git branch //查看当前分支,带*号的是当前所在分支
git merge <目标分支 | dev> //把目标分支dev分支的工作成果合并到当前分支。
git branch -d <目标分支 | dev>//合并完成后,就可以放心地删除目标分支dev分支了
git branch -D <目标分支 | dev>//通过git branch -D 强行删除一个没有被合并过的分支
git log --graph //超详细的分之合并图,细节非常多但是看着很不直观
git log --graph --pretty=oneline --abbrev-commit//用简单图形显示当前分支的合并情况
git log --pretty=oneline --abbrev-commit //合并成单线并输出(无图形描述)
//冲突及解决:git merge时显示冲突,回到文本中单击一下会发现有conflict的具体比较信息,直接手动修改后就可以正常git add跟git commit,让版本号领先冲突的两个号从而冲突消失。记得删除临时分支。
//本地创建的新branch好像无法同步到github的远程branch
git merge --no-ff -m "merge with no-ff" <目标分支 | dev>//用普通模式合并dev目标分支,请注意–no-ff参数,表示禁用Fast forward。普通模式合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git stash //stash功能可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list //工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看,发现工作现场还在,Git把stash内容存在某个地方了
git stash apply //一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
git stash apply < stashID | stash@{0}>//( 注意以"stash@{xx}"的格式填写stashID。)可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash。
git stash drop //删除stash中暂存的东西,和git stash apply相辅使用
git stash pop //二是用git stash pop恢复,恢复的同时把stash内容也删了
git cherry-pick < commit id | 4c805e2> //cherry-pick命令让我们能复制一个特定的提交版本到当前分支
//Debug这块的stash和cherry-pick看的不是特别明白
//多人协作开发的上传冲突解决不是特别明白,以及git pull/git branch --set-upstream-to=origin/dev dev这类指令不熟
git pull //你的小伙伴的最新提交和你试图推送的提交有冲突时,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
git branch --set-upstream-to <branch-name> origin/<branch-name> //git pull也失败的时候,git pull提示no tracking information,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接,然后再pull
//git log中,Git用(HEAD -> master)代表当前本地分支的HEAD,用(origin/master)代表远程origin的HEAD
git rebase //rebase操作可以把本地未push的分叉提交历史整理成直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

//创建标签相关

git tag < tag-name | v1.0> //先切换到需要打标签的分支上,敲命令git tag 就可以打一个新标签
git tag //查看所有标签
git log --pretty=oneline --abbrev-commit//简约显示commit-id
git tag < tag-name | v1.0> < commit-id | f52c633>//给指定版本打标签
git show <tag-name> //查看标签为tag-name的信息
git tag -a <tag-name> -m "<要说明的内容 | version 0.1 released>" < commit-id | f52c633>//创建带有说明的标签,用-a指定标签名,-m指定说明文字
//P.S.标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
git tag -d <tag-name> //删除标签
git push origin <tag-name> //推送某个标签到远程
//这样push和git push origin master竟然是对两个不同的东西进行改变!tag和master对应的远程库不一样!!
git push origin --tags //一次性推送全部尚未推送到远程的本地标签
git push origin :refs/tags/<tag-name>//删除完本地tag后再删除远程tag
//git tag -d <tag-name>结合 git push origin :refs/tags/v0.9使用
//pull request还不是很熟

//关联Gitee上的库

git remote add origin < URL | git@gitee.com:<name>/learngit.git>//关联Aesopd的GItee-learngit库
git remote -v//查看当前目录本地库关联的远程库信息
git remote rm origin //删除本地库已经关联的origin远程库
//git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。
git config --global color.ui true//让Git显示颜色
git add -f <filename> //将被.gitignore忽略的文件强制加入到Git
git check-ignore -v <filename>//检查.gitignore中的文件
//.gitignore文件的编写还不会
git config --global alias.st status//把status宏定义为st,这样就只用输git st而不用输git status了
git config --global alias.xxx 'yyy'//把yyy宏定义为xxx,可自定义内容
//宏定义的例子:git lg:
//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"
//删除别名/宏定义:别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值