相关疑难解决方法(0)

Git:如何重新打包所有松散的提交

在使用git gcgit repack(有各种选项)后,我仍然在文件夹中有4825个松散的提交.git/objects.我想将所有这些文件包含在包文件中,其余包含在其他包文件中.

我正在进行大量的提交重写(修改+ rebase),因此有很多无法提交的提交是完全正常的.我的.gitconfig包含这些参数,可以长时间保持reflogs和unreachable提交.

[gc]
    reflogExpire = 300 days
    reflogExpireUnreachable = 200 days
    pruneExpire = 90 days
Run Code Online (Sandbox Code Playgroud)

您可能想知道它是否有意义,但我已经需要并恢复了几个月前提交的一些提交.我们在一组新的优先级更高的分支机构上开发了很多个月,之后继续在较低优先级的分支机构上继续开发.

这个问题的主要原因是git gui继续抱怨压缩我的数据库despites我做了很多次.如果我们无法打包那些松散的提交,那么这个"抱怨"可能是一个错误git gui.

git garbage-collection git-gui git-commit

7
推荐指数
1
解决办法
1783
查看次数

为什么我必须在更改提交消息后强制推送?

我读到有关如何修改提交消息的内容.接受的答案是:

如果您已经将提交推送到远程分支,那么您需要强制推送提交git push <remote> <branch> --force.

这是我的理解(也来自已接受的答案)git push --force将覆盖远程分支上的所有数据与本地数据.

为什么在更改提交消息后强制推送是必要的?如果我修改提交消息并试图在没有-f或者推送的情况下会发生什么--force

git push git-push

7
推荐指数
1
解决办法
4059
查看次数

恢复后无法 git push 到 master

我错误地将更改推送到远程主分支。所以为了保证它们的安全,我创建了一个backup分支。然后我恢复了我对远程主机所做的更改。

在我本地的 master 分支上,我跑了:

git revert <commit_sha>
Run Code Online (Sandbox Code Playgroud)

进而

我现在已经完成了新分支(备份)的工作,看起来一切都很好。但是我无法将更改从本地backup分支推送到远程主节点。当我git pull在我的备份分支上运行时,我所做的更改丢失了。代码替换为远程主站的内容。

有没有办法将我的更改推送到远程 master 分支而不会丢失我的工作?

git push github revert

6
推荐指数
1
解决办法
8586
查看次数

与自己合并冲突

我前段时间有合并冲突,并且怀疑是我自己。现在我又遇到了同样的问题,这次我可以确定,我对冲突负责。

昨天我对分支进行了一些更改,然后进行commit了更改push。这是第一个,并且到目前为止仅提交到分支(本地和远程)。

今天,我做了一些更改(显然是在相同的文件中),添加了更改并commit --amend提交给push他们并尝试了。

这是我发生合并冲突的情况: Updates were rejected because the tip of your current branch is behind

我修复了更改,添加,提交并推送了它们。现在一切都好。

但是我想从我的错误中学习。这是什么错误?(我认为这与使用有关git commit --amend

git merge git-commit

6
推荐指数
1
解决办法
641
查看次数

git可以推送到远程存储库的当前分支吗?

/sf/answers/2417463541/

当您推送到远程存储库的已签出分支时,通常会收到警告,而Git将不允许您这样做

但是我暗示git可以将Loeliger的2ed版本从带有Git的Version Control中推送到远程存储库的当前分支,尤其是粗体文本:

推送操作可以更新存储库状态,包括HEAD commit。也就是说,即使远端的开发人员什么也没做,分支引用和HEAD可能会更改,与检出的文件和索引不同步。

积极在发生异步推送的存储库中工作的开发人员将看不到该推送。但是该开发人员的后续提交将发生在意外的HEAD上,从而产生了奇怪的历史记录。强制推送将丢失其他开发人员的推送提交。该存储库中的开发人员还可能发现自己无法与上游存储库或下游克隆协调其历史记录,因为它们不再像应有的那样简单快速。她也不知道为什么:存储库已经从她下面悄悄地更改了。猫和狗将生活在一起。不好

因此,鼓励您仅将其推送到裸仓库中。这不是一成不变的规则,但这对普通开发人员来说是一个很好的指南,被认为是最佳实践。在一些实例和用例中,您可能希望将其推送到开发存储库中,但是您应该完全理解其含义。当您确实要推送到开发存储库时,您可能需要遵循两种基本方法之一。

在第一种情况下,您确实确实希望在接收存储库中有一个工作目录,其中包含一个已检出的分支。例如,您可能知道,没有其他开发人员在那里进行过积极的开发,因此,没有人会因为无声更改被推入其存储库而盲目地站在一边。

在这种情况下,您可能希望在接收存储库中启用一个钩子,以对某个分支(也可能是刚刚推送的分支)执行检入操作。为了在自动检出之前验证接收存储库处于健全状态,挂钩应确保非裸存储库的工作目录不包含任何编辑或修改的文件,并且在推入时其索引中没有处于暂存但未提交状态的文件发生。如果不满足这些条件,则可能会因结帐覆盖而丢失这些编辑或更改的风险。

在另一种情况下,推送到裸机存储库也可以很好地工作。根据协议,每个推送更改的开发人员都必须推送到未签出的分支,该分支仅被视为接收分支。开发人员从不推送到期望被检出的分支。特别是由某些开发人员来管理签出哪个分支以及何时签出。也许那个人负责处理接收分支并将它们合并到主分支,然后再签出。

是否暗示git可以推送到远程存储库的当前分支?(我的猜测是,但是我不确定)

最后一段之前的段落(该段落建议使用钩子来检出通过push更新的分支)是否假定要推送到的分支不是远程存储库中的当前分支?(我的想法是,签出要推送到的分支暗含了要推送到的分支不是当前分支,但是最后一段指出了推送到非签出分支的“不同情况”,这对我意味着上一段是关于推送到已签出分支(即当前分支)的信息

git

3
推荐指数
1
解决办法
496
查看次数

Git从其他人所做的远程删除最后一次提交

所以,我的情况是(错误地)我已经允许一个人访问我的分支。现在在我的本地我已经提交了,当我尝试将它推送到远程时,它显示远程在前面。因为另一个人已经通过多次提交将他的代码推送到这个分支。现在,我可以在不拉到本地的情况下从远程删除这些提交吗?

我试图这样做 git push origin +<<commit number>>^:branch

但它说 src refspec <<commit number>>^ does not match any.

git github bitbucket

3
推荐指数
1
解决办法
1298
查看次数

Git:reset + force push vs revert 的优缺点是什么

重置 + 强制推送与还原的优缺点是什么。什么时候适合这些技术?

这个问题不同于Git Revert、Checkout 和 Reset 有什么区别?因为我想更详细地了解force push

git

2
推荐指数
1
解决办法
1076
查看次数