Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git fast forward取代了删除以前历史记录的整个回购协议_Git_Github_Git Branch_Fast Forward - Fatal编程技术网

Git fast forward取代了删除以前历史记录的整个回购协议

Git fast forward取代了删除以前历史记录的整个回购协议,git,github,git-branch,fast-forward,Git,Github,Git Branch,Fast Forward,github上有一个名为a的回购协议。我从github将此回购克隆到我的本地。原始回购协议A有一个名为“A”的分支,它是A的早期版本。回购协议的所有者提交了一份文件,删除了历史记录并替换了回购协议上的所有文件。在github上,如果您将这两种类型合并,它会说,A和A是完全不同的提交历史记录 我的问题是,我想在一个同步的服务器上推送一个提交,就像在所有者快速转发主分支之前的备份一样。但是如果我在提交之前先拉(这是一个很好的做法),我肯定会遇到问题,因为它根本不同步。 最好的解决办法是停止跟踪mas

github上有一个名为a的回购协议。我从github将此回购克隆到我的本地。原始回购协议A有一个名为“A”的分支,它是A的早期版本。回购协议的所有者提交了一份文件,删除了历史记录并替换了回购协议上的所有文件。在github上,如果您将这两种类型合并,它会说,
A和A是完全不同的提交历史记录

我的问题是,我想在一个同步的服务器上推送一个提交,就像在所有者快速转发主分支之前的备份一样。但是如果我在提交之前先拉(这是一个很好的做法),我肯定会遇到问题,因为它根本不同步。

最好的解决办法是停止跟踪master的工作,并用一个我所知道的分支来代替它。如何删除快进提交并使其同步回“a”分支。

另外,回购协议的所有人获得
![被拒绝]主控->主控(非快进)
如果他试图做git拉动。表示“他的当前分支的尖端在其远程对应分支的后面”

如果任何部分不清楚,请随时询问,我已经连续2天遇到这个问题了! 谢谢。

(如果你有一个问题藏在某处,我肯定找不到。以下是我根据你想问的猜测得出的答案:)

我不知道你为什么认为在提交东西之前进行盲拉是一种好的做法。执行
git fetch
,然后执行
gitk master origin/master
以确定当前状态的意义。然后,您通常需要在
git签出主机和&git-rebase-origin/master
git签出主机和&git-merge-origin/master
之间做出选择


如果本地
master
分支不应该在某个地方,首先确保没有未提交的更改,然后执行
git checkout master和&git reset--hard[sha1 of the commit your want]
master
分支移动到任何您喜欢的地方。如果您想用新的正确状态覆盖
origin
上的主分支,只需执行
git push-f origin master
。请注意,如果其他人已从
源代码
检查了旧的
主代码
,则需要重新确定其所有提交的基础,以遵循新的
主代码
。有关详细信息,请参阅。

我用一个简单的解决方案解决了它。 1.本地更改是通过git commit-a-m'temp'提交的

2.我创建了一个新分支,所有这些更改都反映在我的本地机器上。
3.在master branch结账
git签出主机

4.在我提交原始回购协议后,我进行了强制推进
git-push-f上游主机
现在我的本地回购和原始回购完全同步。

另外,由于武力推动改变了历史,所以有很多警告。所以要非常小心地使用它。

git pull或fetch我认为只是在本地副本中合并有区别。将在上次提交和当前提交之间带来更改。所以我总是在git推之前使用git fetch/pull。git reset hard没有显示提交,因为我没有执行git pull,即上游回购上的提交。不过,谢谢。我的观点是,在看到本地和远程分支(通常是可视的,但任何适合您的分支)之后,您更容易决定是否要合并或重新基址。当然,如果您已经发布了您的本地分支,那么rebase通常不是正确的选择。如果您更喜欢拉取,而不是先提取,然后合并或重新基址,则必须在
pull
pull--rebase
之间做出选择,除非您确实更喜欢在此处或此处合并。另外值得一提的是,通常最佳做法是将功能合并到主功能中,而不是将原始/主功能合并到当前头中(通常是某种特征)在实践中,如果您的本地
master
包含新功能或类似功能,请执行
git checkout-b super-cool ui&&git-co-master&&git-reset--hard-origin/master&&git-merge super-cool ui&&git-push
。也就是说,尝试使
master
反映
origin
的当前或下一个
master
(或上游
)并根据所做的工作在标记的分支中进行所有新的开发。Google for
git feature branch
。谢谢Mikko。你说pull比fetch好。我不太明白你在上述评论中试图表达的观点。在搜索feature branch@MikkoRantalainen之后,我从这里学到了一些东西,即使在这种情况下,我也没有学到什么您可能只需要执行一次
提取
,然后使用
提取头
您可以详细说明您的解决方案吗?在您执行
签出主机
之后,branch
temp
发生了什么事?我看到您的远程存储库被称为
上游
,而不是
源站
(我在回答中使用了它).temp只是当前未发布工作的快照。我在主分支上提交了它,然后制作了主分支的副本。在此之后,切换回新分支,并重置head以忽略此提交。我希望我比我的问题清楚得多;)
temp
是一个分支。但是,我不能理解你所说的“我在主分支上提交了它”是什么意思因为一个人不能将一个分支提交给另一个分支。你的意思是
rebase
还是
merge
?我会解释。当前工作应该存储在某个地方,这样我就不会丢失它。所以temp。这一切都在master上。一旦我提交了这个分支,master就有temp。现在当我创建一个新分支时,它有这个temp提交。所以我在他现在有了新的分支。在master上,我不想要它,因为我做了一个力推。因为当前的工作已经完成了一半(不重要)。所以我从master那里做了一个重置和完成。然后做了一个力推来解决主要问题