是否有一种简单的方法可以删除远程等效不再存在的所有跟踪分支?
例:
分支机构(本地和远程)
在本地,我只有一个主分支.现在我需要处理bug-fix-a,所以我检查它,处理它,并将更改推送到远程.接下来我用bug-fix-b做同样的事情.
分支机构(本地和远程)
现在我有本地分支机构master,bug-fix-a,bug-fix-b.Master分支维护者将我的更改合并到master中并删除他已经合并的所有分支.
那么现在的状态是:
分支机构(本地和远程)
现在我想调用一些命令删除分支(在本例中为bug-fix-a,bug-fix-b),这些分支不再在远程存储库中表示.
它会像现有的命令git remote prune origin,但更像是git local prune origin.
让我们说我们在git中有以下情况:
创建的存储库:
mkdir GitTest2
cd GitTest2
git init
Run Code Online (Sandbox Code Playgroud)主服务器中的一些修改发生并得到提交.
echo "On Master" > file
git commit -a -m "Initial commit"
Run Code Online (Sandbox Code Playgroud)Feature1分支主,一些工作完成:
git branch feature1
git checkout feature1
echo "Feature1" > featureFile
git commit -a -m "Commit for feature1"
Run Code Online (Sandbox Code Playgroud)同时,在主代码中发现错误并建立了修补程序分支
git checkout master
git branch hotfix1
git checkout hotfix1
Run Code Online (Sandbox Code Playgroud)该错误在修补程序分支中修复并合并回主服务器(可能在拉取请求/代码审查之后):
echo "Bugfix" > bugfixFile
git commit -a -m "Bugfix Commit"
git checkout master
git merge --no-ff hotfix1
Run Code Online (Sandbox Code Playgroud)feature1的开发继续:
git checkout feature1
Run Code Online (Sandbox Code Playgroud)现在我的问题:说我需要我的功能分支中的修补程序,可能是因为那里也出现了错误.如何在不将提交复制到我的功能分支的情况下实现此目的?我想阻止在我的功能分支上获得两个与功能实现无关的新提交.如果我使用Pull请求,这对我来说尤其重要:所有这些提交也将包含在Pull Request中,并且必须进行审核,尽管已经完成(因为修补程序已经在主服务器中).
我做不到git merge master --ff-only:"致命:不可能快进,堕胎."但我不确定这是否对我有所帮助.
我有两个完全合并的分支.
但是,在完成合并之后,我意识到一个文件已经被合并搞砸了(其他人做了自动格式化,gah),并且更容易在另一个分支中更改为新版本,并且然后重新插入我的一行更改后将其带入我的分支.
那么git中最简单的方法是什么呢?
git branch -a 显示远程和本地分支.
git branch -r 显示远程分支.
有没有办法列出当地的分支机构?
我有两个分支:master和dev
我想从dev分支创建一个"功能分支" .
目前在分支开发,我做:
$ git checkout -b myfeature dev
Run Code Online (Sandbox Code Playgroud)
... (一些工作)
$ git commit -am "blablabla"
$ git push origin myfeature
Run Code Online (Sandbox Code Playgroud)
但是,在对我的树枝进行可视化之后,我得到了:
--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**
Run Code Online (Sandbox Code Playgroud)
我的意思是分支似乎合并了,我不明白为什么......
我做错了什么?
请问您如何解释我如何从另一个分支分支并推回到功能分支的远程存储库?
所有这些都在分支模型中,就像这里描述的那样.
我有master跟踪远程分支的分支origin/master.
我想将它们重命名为master-old本地和远程.那可能吗?对于跟踪的其他用户origin/master(以及经常更新其本地master分支的用户git pull),重命名远程分支后会发生什么?他们git pull仍然会工作还是会抛出一个它再也找不到的错误origin/master?
然后,继续,我想创建一个新的master分支(本地和远程).再说一次,在我这样做之后,如果其他用户这样做会发生什么git pull呢?
我想这一切都会带来很多麻烦.是否有一种干净的方式来获得我想要的东西?或者我应该保持master原样,并创建一个新的分支,master-new然后继续在那里工作?
我开始在我的主分支上工作,认为我的任务很简单.过了一会儿,我意识到这将需要更多的工作,我想在一个新的分支中完成所有这些工作.如何创建一个新分支并随身携带所有这些更改而不会弄脏主人?
要移动已签出分支的分支指针,可以使用该git reset --hard命令.但是如何移动未检出分支的分支指针指向不同的提交(保留所有其他东西,如跟踪的远程分支)?
这是我的git工作流程.
我在两台不同的计算机(A和B)上工作,并在dropbox目录中存储一个公共git远程.
假设我有两个分支主人和开发人员.两者都在追踪他们的远程对手origin/master和origin/devel.
现在,在计算机A上,我删除了分支开发 - 本地和远程 - 如下所示:
git push origin :heads/devel
git branch -d devel
Run Code Online (Sandbox Code Playgroud)
现在如果我git branch -a在电脑A上做,我明白了
master
origin/HEAD
origin/master
Run Code Online (Sandbox Code Playgroud)
我现在去电脑B.做git fetch.我可以删除本地开发分支
git branch -d devel
Run Code Online (Sandbox Code Playgroud)
但我无法删除远程开发分支.
git push origin :heads/devel
error: unable to push to unqualified destination: heads/proxy3d
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
fatal: The remote end hung up unexpectedly …Run Code Online (Sandbox Code Playgroud) 来自mercurial,我使用分支来组织功能.当然,我也想在我的历史中看到这种工作流程.
我使用git开始了我的新项目并完成了我的第一个功能.合并该功能时,我意识到git使用快进,即如果可能,它会将我的更改直接应用到主分支并忘记我的分支.
因此,思考未来:我是唯一一个从事这个项目的人.如果我使用git的默认方法(快进合并),我的历史将导致一个巨大的主分支.没有人知道我为每个功能使用了一个单独的分支,因为最后我只有那个巨大的主分支.这看起来不专业吗?
通过这种推理,我不想要快进合并,也不知道为什么它是默认的.这有什么好处的?