我是一个初学者,为天真的问题道歉:
我通过以下方式将我的本地仓库变成一团糟:
改变事物并提交但不推动。现在,服务器上的存储库已被其他一些用户更改。我理想的做法是忽略我的所有提交,从服务器中提取最后一个版本,然后提交我的更改,然后推送。有没有办法做到这一点?答案 0 :(得分:2)
假设只涉及主分支,请执行以下操作:
$ git pull --rebase origin master
您将所有更改提取到主分支,您的提交已重新设置,就像您第一次撤消新更改一样,然后开始进行更改并提交。
你也可以
$ git pull
但你最终可能会以合并提交结束。我喜欢先修改(或pull --rebase
)以使历史更容易阅读。
查看这些git教程:https://www.atlassian.com/git/
答案 1 :(得分:0)
我假设此处只涉及master
分支。
首先将当前工作保存到新分支
git checkout -b saved_branch
你可以结账到你开始的提交。
git checkout ab1234efbe
然后你可以创建一个新的分支基础
git checkout -b new_branch_name
现在进行其他人所做的更改
git pull origin master
然后你可以合并
git merge saved_branch
现在你可以推送到服务器了。
答案 2 :(得分:0)
听起来你做得很好。
有很多方法可以解决这个问题。我将尝试提出一个超级简单的解决方案: - )
使用SourceTree或git log
在历史记录中找到先前的提交,我想在第一次本地(非推送)提交之前提交。
然后记下要保留的服务器的最后一次提交的提交ID(guid),"扔掉"您的本地提交,同时使用git reset --soft
保留您的更改:
git reset 6c747669c865e03c13027761569f02d930937ee4 --soft
现在您的分支已恢复到原始状态,并且您的更改已取消暂存。暂存和隐藏您的更改:
git add .
git stash
现在你的主分支应该是干净的,处于原始状态。你现在应该可以从原点进行获取/拉取。
当您的本地仓库与master保持同步时,只需再次应用您的存储(并考虑您现在可能需要解决冲突):
git stash apply
一些建议:使用像SourceTree之类的GUI来查看您的本地回购,但我的个人建议是:不要试图使用SourceTree来执行任何操作(如提交或推送)。使用命令行执行任何操作。仅使用GUI查看/可视化您的回购历史。
我还强烈建议使用git-up(Ruby或Python版本,具体取决于您的平台。我使用PyGitUp版本。)
使用Git时首先要意识到的是,除非你把乱七八糟的东西推到服务器上,否则你不能搞砸任何东西!: - )
您需要熟悉使用本地分支进行工作,而不是在master
分支上工作。这将使将来更容易重组/合并。