一不小心把本地的临时分支push到server上去了,想要删除。
一开始用
git branch -r -d origin/branch-name
不成功,发现只是删除的本地对该远程分支的track,正确的方法应该是这样:
git push origin :branch-name
冒号前面的空格不能少,原理是把一个空分支push到server上,相当于删除该分支。
Git常用命令
1、生成密钥对:
a.生成密钥对ssh-keygen -t rsa -C "你的邮箱" 其中C是大写
b.生成之后用 notepad c:/User/Administrator/.ssh/id_rsa.pub 打开文件,然后将公钥添加的Gitlab中
2、获取远程git库:
git clone <库名,如:git@github.com:vstest/yk-manage.git>
3、添加、提交、推送修改文件:
git add<name>
git commit <name> -m "提交注释"
git push
git add "*.txt"-->添加文件*.txt
git add *.txt-->添加所有以txt为扩展名的文件
恢复某个已修改的文件(撤销未提交的修改):
$ git checkout file-name
4、获取远程版本库文件:
git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git pull:相当于是从远程获取最新版本并merge到本地
5、分支管理
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
6、git标签
git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
7、历史版本
git log:查看提交记录(历史得commit记录)
git status:当前修改得状态,是否修改了还没提交,或者哪些文件未使用
git reset <log>:恢复到历史版本
删除 git rm -r
git reset
git checkout head .
git 获取历史版本的几种方式
查看历史提交的目录树: git ls-tree <tree-ish> <paths> 例:git ls-tree d06b1cf09d2 test.txt git ls-tree -r refs/tags/D doc
整个工作区切换到历史版本: git checkout <commit> 例:git checkout HEAD^^
检出某个文件的历史版本: git checkout <commit> <paths> 例: git checkout refs/tags/D — test.txt git checkout d06b1cf09d2 — doc
检出某个文件的历史版本到其他文件名: git show <commit>:<file> new_name 例:git show d06b1cf09d2:text.txt > test1.tx
从git中删除idea:
git rm —cached -r .idea
git checkout 报错原因 (error: pathspec 'master' did not match any file(s) known to )
以下是发生的场景
在一个空的目录中(/tempRepo)
执行:
正常情况下是可以回到master分支的
不过这时是报错误的,错误信息如下:
error: pathspec 'master' did not match any file(s) known to git.
这里是因为,还没有文件被提交过。即没有commit 过任何文件。
当commit过以后就可以切换分支了
备注:此时执行:git branch,只显示有dev 这个branch。
不过我们可以直接再创建一个master出来。
标签可以针对某一时间点的版本做标记,常用于版本发布。
$ git tag # 在控制台打印出当前仓库的所有标签
$ git tag -l ‘v0.1.*’ # 搜索符合模式的标签
git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象。建议使用附注标签。
# 创建轻量标签
$ git tag v0.1.2-light
# 创建附注标签
$ git tag -a v0.1.2 -m “0.1.2版本”
创建轻量标签不需要传递参数,直接指定标签名称即可。
创建附注标签时,参数a即annotated的缩写,指定标签类型,后附标签名。参数m指定标签说明,说明信息会保存在标签对象中。
与切换分支命令相同,用
git checkout [tagname]
查看标签信息
用
git show
命令可以查看标签的版本信息:
$ git show v0.1.2
误打或需要修改标签时,需要先将标签删除,再打新标签。
$ git tag -d v0.1.2 # 删除标签
参数d即delete的缩写,意为删除其后指定的标签。
打标签不必要在head之上,也可在之前的版本上打,这需要你知道某个提交对象的校验和(通过
git log
获取)。
# 补打标签
$ git tag -a v0.1.1 9fbc3d0
通常的
git push
不会将标签对象提交到git服务器,我们需要进行显式的操作:
$ git push origin v0.1.2 # 将v0.1.2标签提交到git服务器
$ git push origin –tags # 将本地所有标签一次性提交到git服务器
注意:如果想看之前某个标签状态下的文件,可以这样操作
1.git tag 查看当前分支下的标签
2.git checkout v0.21 此时会指向打v0.21标签时的代码状态,(但现在处于一个空的分支上)
3. cat test.txt 查看某个文件
如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,
在发布这个配置文件的时候,会发生代码冲突:
error: Your local changes to the following files would be overwritten by merge:
protected/config/main.php
Please, commit your changes or stash them before you can merge.
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull
git stash pop
然后可以使用git diff -w +文件名 来确认代码自动合并的情况.
反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset --hard
git pull
其中git reset是针对版本,如果想针对文件回退本地修改,使用
git checkout HEAD file/to/restore