Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 保持提交并拉入存储库,然后推动提交_Git - Fatal编程技术网

Git 保持提交并拉入存储库,然后推动提交

Git 保持提交并拉入存储库,然后推动提交,git,Git,我是一个git初学者,所以为这个天真的问题道歉: 我正在通过以下方式将我的本地回购协议弄得一团糟: 改变事情并付诸实施,但不推动。现在,服务器上的存储库已被其他一些用户更改。理想情况下,我想做的是忽略所有提交,从服务器中提取最后一个版本,然后提交更改,然后推送。有办法吗?我假设这里只涉及master分支 首先将当前工作保存到新分支 git checkout -b saved_branch 您可以签出以提交开始 git checkout ab1234efbe 然后您可以创建一个新的分支库 g

我是一个git初学者,所以为这个天真的问题道歉:

我正在通过以下方式将我的本地回购协议弄得一团糟:


改变事情并付诸实施,但不推动。现在,服务器上的存储库已被其他一些用户更改。理想情况下,我想做的是忽略所有提交,从服务器中提取最后一个版本,然后提交更改,然后推送。有办法吗?

我假设这里只涉及
master
分支

首先将当前工作保存到新分支

git checkout -b saved_branch
您可以签出以提交开始

git checkout ab1234efbe 
然后您可以创建一个新的分支库

git checkout -b new_branch_name
现在把别人所做的改变拉进来

git pull origin master
然后你可以合并

git merge saved_branch

现在您可以推送到服务器。

听起来您做得很好

有很多方法可以解决这个问题。我将尝试提出一个超级简单的解决方案:-)

使用SourceTree或git log查找历史记录中的上一次提交,我猜是在第一次本地(非推送)提交之前进行的提交

然后记下要保留的服务器上一次提交的提交ID(guid),并“丢弃”本地提交,同时使用git reset--soft保留更改:

git reset 6c747669c865e03c13027761569f02d930937ee4 --soft 
现在,您的分支已恢复到原始状态,您所做的更改已取消时效。转移并隐藏您的更改:

git add .
git stash
现在您的主分支应该是干净的,处于原始状态。您现在应该可以从原点执行提取/拉取操作了

当您的本地回购与主控最新时,请再次应用您的库存(并考虑到现在可能有冲突要解决):

一些建议:使用GUI查看本地回购协议,但我个人的建议是:不要试图使用SourceTree执行任何操作(如提交或推送)。使用命令行执行任何操作。仅使用GUI查看/可视化回购历史记录

我还强烈建议使用GitUp(或者版本,取决于您的平台。我使用PyGitUp)

在使用Git时首先要意识到的是,你不能真的搞砸任何事情(当然,除非你把你的乱七八糟的东西推到服务器上!)


您需要习惯于在工作中使用本地分支,而不是使用
master
分支。这将使将来的重定基/合并更容易。

假设只涉及主分支,只需执行以下操作:

$ git pull --rebase origin master
您将把所有更改拉到主分支,并重新设置提交的基础,就像您首先拉取了新更改,然后开始进行更改并提交一样

你也可以

$ git pull
但最终很可能会出现合并提交。我喜欢先重新设置基址(或
pull--rebase
),以使历史记录更易于阅读


查看这些git教程:

我也是git初学者!要记住的最重要的一点是:你不能把git搞得一团糟,所以就做实验吧。只要不将错误推送到服务器,就可以撤消所有操作。即使您以某种方式丢失了提交,也可以使用
git reflog
将其取回。所以,别担心,事情会变得简单:-)我实际上看不出你在做什么有什么问题。只需执行git pull,本地提交将与远程提交合并。在进行任何更改之前,不必使用remote更新本地副本。Git很酷,别担心。我会使用
Git stash save stash_name
来确保在使用
Git stash list
$ git pull