删除github上的远程分支
Git push origin 【空格】【冒号】【分支名】
比如我github上有master和feature分支,我现在想着删除feature分支,命令如下:
git push origin :feature
ok,这样你github上的远程分支就被删除了。别问为什么,就是删除了!!!
git的哲学好想是,删除是通过push实现的。。。。。。我也不知道为什么。可能是It’s because it is!
从初始化到push
//机器自报家门
git config --global user.name "xxx"
git config --global user.email "xxxxxx@126.com"
//产生SSH需要使用的公钥私钥
ssh-keygen -t rsa -C "xxxxxx@126.com"
//去github上把公钥填进去
//如果下一步报错,这里可能还需要“自报家门”一次
//关联远程repo
git remote add origin git@github.com:username/repo
git init
//add、commit、push
git add --all
git commit -m "xxxxxx"
git push origin "branch_name"
分支有关知识小结
//创建并切换分支
git checkout -b dev
//创建分支
git branch dev
//切换分支
git checkout dev
//查看分支
git branch
git merge dev
//删除本地分支
git branch -d dev
//查看冲突的文件
git status
//看分支合并情况(有很多可选参数)
git log --graph --pretty=oneline --abbrev-commit
标签基础知识小结
//查看标签
git tag
//新建一个标签,默认为HEAD,也可以指定一个commit-id
git tag V1.1
//打标签:给commit号6224937打上V0.9标签
git tag v0.9 6224937
//查看标签信息
git show v0.9
//带有说明的标签,-a指定标签名,-m指定说明文字
git tag -a v0.1 -m "version 0.1 released" 3628164
//推送一个本地标签
git push origin <tagname>
//推送全部未推送过的本地标签
git push origin --tags
//删除一个本地标签
git tag -d <tagname>
//删除一个远程标签
git push origin :refs/tags/<tagname>
/*
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git tag -d v0.9
然后,从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/v0.9
*/
git add remote origin报错
git add remote origin git@github.com:xxx/repo
这个语句的作用是将本地仓库和远程仓库关联起来 。
问题描述
输入git remote add origin git@github.com:chenyanhao/.emacs.d.git
出现报错:fatal: remote origin already exists.
解决办法
- 先删除远程仓库:
git remote rm origin
- 再添加远程仓库:
git remote add origin git@github.com:chenyanhao/.emacs.d.git
- 如果执行第一步的
git remote rm origin
报错,则需要手动修改config
文件(该文件位于本地仓库的.git
目录中)
- vi $local_repo/.git/config
- 把
[remote “origin”]
那一行删掉 - 重新执行
git remote add origin add ......
git的配置文件
理论:关于git config
Git有一个工具被称为git config,它允许你获得和设置配置变量;这些变量可以控制Git的外观和操作的各个方面。这些变量可以被存储在三个不同的位置:
/etc/gitconfig
:包含了适用于系统所有用户和所有库的值。如果你传递参数选项--system
给git config
,它将明确的读和写这个文件。~/.gitconfig
:具体到你的用户。你可以通过传递--global
选项使Git 读或写这个特定的文件。.git/config
:无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/config
中的值覆盖了在/etc/gitconfig
中的同一个值。
在Windows系统中,Git在
$HOME
目录中查找.gitconfig
文件。它也会查找/etc/gitconfig
,尽管它是相对于Msys根目录的;这可能是你在Windows中运行安装程序时决定安装Git的任何地方。
实践:配置相关信息
用户名和email
当安装Git后首先要做的事情是设置的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到提交中:
git config --global user.name "xxx"
git config --global user.email "xxx@example.com"
你的编辑器(Your Editor)
现在,你的标识已经设置,你可以配置你的缺省文本编辑器,Git在需要你输入一些消息时会使用该文本编辑器。缺省情况下,Git使用你的系统的缺省编辑器,这通常可能是vi 或者 vim。如果你想使用一个不同的文本编辑器,例如Emacs,你可以做如下操作:
git config --global core.editor emacs
检查你的设置(Checking Your Settings)
如果你想检查你的设置,你可以使用git config --list
命令来列出Git可以在该处找到的所有的设置:
git config --list
你也可以查看Git认为的一个特定的关键字目前的值,使用如下命令git config {key}
,例如:
git config user.name
获取帮助(Getting help)
如果当你在使用Git时需要帮助,有三种方法可以获得任何git命令的手册页(manpage)帮助信息:
git help <verb>
git <verb> --help
man git-<verb>
例如,你可以运行如下命令获取对config
命令的手册页帮助:
git help config
Fast Forward报错
多人协同开发,使用Git经常会看到警告信息包含术语:fast forward
, 这是何义?
简单来说就是提交到远程中心仓库的代码必须是按照时间顺序的。
比如A从中心仓库拿到代码后,对文件f进行了修改。然后push到中心仓库。
B在A之前就拿到了中心仓库的代码,在A push成功之后也对f文件进行了修改。这个时候B也运行push命令推送代码。
会收到一个类似error:failed to push som refs to ...
的信息:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://csfreebird@aaa.bbb.ccc.ddd:username/repo'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
这是提醒你非快进方式
的更新被拒绝了,需要先从中心仓库pull到最新版本,merge后再push。
fast forward能够保证不会强制覆盖别人的代码,确保了多人协同开发。尽量不要使用non fast forward方法提交代码。
上面是原理,解决办法 是:
- 先输入
git pull origin master
- 接着输入
git push origin master
- 如果出现报错
fatal: Couldn't find remote ref master
或者fatal: 'origin' does not appear to be a git repository
以及fatal: Could not read from remote repository
- 则需要重新输入
git remote add origin git@github.com:username/repo