我遵循一个开发过程,为每个新功能或故事卡创建一个新的本地分支.完成后,我将分支合并为master,然后推送.
由于懒惰或健忘的结合,随着时间推移会发生的事情是,我最终得到了大量的本地分支,其中一些(例如尖峰)可能没有被合并.
我知道如何列出我所有的本地分支,我知道如何删除一个分支,但我想知道是否有一个git命令允许我删除所有我的本地分支?
以下是该git branch --merged命令的输出.
user@machine:~/projects/application[master]$ git branch --merged
STORY-123-Short-Description
STORY-456-Another-Description
STORY-789-Blah-Blah
* master
Run Code Online (Sandbox Code Playgroud)
所有删除列出的分支的尝试grep -v \*(根据下面的答案)都会导致错误:
error: branch 'STORY-123-Short-Description' not found.
error: branch 'STORY-456-Another-Description' not found.
error: branch 'STORY-789-Blah-Blah' not found.
Run Code Online (Sandbox Code Playgroud)
我正在使用:
git 1.7.4.1
ubuntu 10.04
GNU bash,版本4.1.5(1) -
发布GNU grep 2.5.4
假设我们有一个稳定的应用程序.
明天,有人会报告我们决定立即修补的大错误.因此,我们为"master"创建了一个针对该修补程序的分支,我们将其命名为"2011_Hotfix",然后我们将其推送到所有开发人员可以协作修复它.
我们修复了这个bug,并将"2011_Hotfix"合并到"master"以及当前的开发分支中.推"主人".
我们现在用"2011_Hotfix"做什么?它应该只是作为一个分支永远坐在那里直到时间结束,还是我们现在应该删除它,因为它已经达到了它的目的?将分支放在各处都是不洁净似乎是不洁净的,因为分支列表可能会变得很长,其中大部分都不再需要了.
如果它应该被删除,它的历史会发生什么?即使实际的分支不再可用,这是否会得到维护?另外,我如何删除远程分支?
如何将Github pull请求中包含的更改作为统一差异下载?
git pull origin master和之间有什么区别git pull origin/master?
我正在做一个Web应用程序,我需要为一些重大更改创建一个分支,事实是,这些更改需要更改数据库模式,所以我想将整个数据库放在git下.
我怎么做?是否有一个特定的文件夹,我可以保存在git存储库下?我怎么知道哪一个?我怎么能确定我正在放置正确的文件夹?
我需要确定,因为这些变化不向后兼容; 我搞不起搞砸了.
我的数据库是PostgreSQL
有人建议进行备份并将备份文件置于版本控制下而不是数据库中.说实话,我发现真的很难吞下去.
一定有更好的方法.
好的,所以没有更好的方法,但我仍然不太相信,所以我会稍微改变一下这个问题:
我想把整个数据库置于版本控制之下,我可以使用什么数据库引擎,以便我可以将实际数据库置于版本控制而不是转储?
sqlite会对git友好吗?
由于这只是开发环境,我可以选择我想要的任何数据库.
我真正想要的不是跟踪我的开发历史,而是能够从我的"新的激进变化"分支切换到"当前的稳定分支",并且能够例如修复一些错误/问题等等.稳定的分支.这样,当我切换分支时,数据库自动神奇地变得与我当前所在的分支兼容.我真的不太关心实际数据.
Subversion,Git,Mercurial和其他人支持三方合并(结合我的,他们的和"基础"修订版)并支持解决冲突的图形工具.
你用什么工具?Windows,Mac OS X,Linux,免费或商业,您可以命名.
以下是我用过或听过的一些内容,只是为了开始对话:
当我尝试将目录从FOO重命名为foo时,git mv FOO foo我得到了
fatal: renaming 'FOO' failed: Invalid argument
Run Code Online (Sandbox Code Playgroud)
好.所以我试试git mv FOO foo2 && git mv foo2 foo
但当我尝试通过git commit .我得到
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)
Run Code Online (Sandbox Code Playgroud)
当我通过git add foo无变化添加目录并git commit .再次给我相同的消息.
我究竟做错了什么?我以为我使用区分大小写的系统(OSX)为什么我不能简单地重命名目录?
我这样做了git commit -m "message":
> git commit -m "save arezzo files"
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: arezzo.txt
# modified: arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)
但之后,当我这样做git status时显示相同的修改文件:
> git status
# On branch master
# Changes not …Run Code Online (Sandbox Code Playgroud) 我在本地使用Mercurial进行项目(这是唯一没有推送/拉动其他地方的回购).
到目前为止,它有一个线性历史.然而,我正在研究的当前事情我现在已经意识到这是一种可怕的方法,我想在开始之前回到版本并以不同的方式实现它.
我对Mercurial中的branch/ revert/ update -C命令有点困惑.基本上我想恢复到版本38(目前在45)并让我的下一个提交有38作为父母并从那里继续.我不在乎修改39-45是永远丢失还是最终落入他们自己的死胡同.
我需要哪个命令/命令集?
我创建了新的分支master:
git checkout -b testbranch
我做了20次提交.
现在我要压缩那20个提交.我这样做:
git rebase -i HEAD~20
如果我不知道有多少提交怎么办?有什么方法可以做以下事情:
git rebase -i all on this branch
version-control ×10
git ×8
dvcs ×2
github ×2
bash ×1
branch ×1
database ×1
diff ×1
git-branch ×1
git-commit ×1
git-gui ×1
grep ×1
macos ×1
mercurial ×1
merge ×1
postgresql ×1
revert ×1
ubuntu ×1