如何还原我提交的更改?

9
我正在使用beanstalkapp,并且在一个分支前面看到了冲突,但只是"冲突"这个信息不太有用。即使我运行git status命令,也没有任何提示表明存在冲突。请问如何找到发生冲突的文件?以下是一个来自仪表盘的图片:Here is a image from dashboard

我认为你需要更详细地解释一下你所做的事情。你是在分支上进行的更改(而不是主分支)吗?你合并了该分支吗?你是否合并了其他地方的更改?如果没有更多关于你所做的事情的细节,可能很难帮助你解决问题。 - Jonathan Leffler
1个回答

6
如果您在服务器端看到冲突但在您的端上没有看到-您可能有不同的内容。首先从远程服务器执行git pull以确保您已经更新。

我想回到几天前的提交,并且放弃此后的任何更改。

阅读完整详细答案,其中将详细说明您可以做什么。
基本上,您有几个选项,但主要选项是:
  • git reset
  • git checkout -b <sha-1>

如何找到所需的提交?

您可以使用日志命令或git reflog来实现。

git reflog

git reflog将显示更新了HEAD的任何更改,并检查所需的reflog条目将会将HEAD设置回此提交。

每次修改HEAD都会在reflog中创建一个新条目。

# print teh git reflog
git reflog

# find out the desired commit (of the index in the reflog) 
git checkout HEAD@{...}

enter image description here


git checkout

的翻译是:

{{链接1:git checkout}}

# Find out the desired commit which you wish to go back to 
# Once you have it checkout the commit to a new branch
git checkout -b <new branch> <commit_id>

另一个选项是使用git reset

git reset HEAD --hard <commit_id>

"移动"您的头指向所需的提交。
与以前一样,找到所需的提交,然后告诉您的仓库指向该提交。

# read the documentation about the different flavors of the reset (hard/mixed/soft)
git reset HEAD --hard <sha-1>

现在你的代码库已经回到所需的提交。

问题是我不知道冲突是在远程仓库还是我的本地仓库。我肯定想要放弃某个提交之后的所有提交或同步更改。很模糊,我不知道哪个文件有冲突。 - localhost
你可以将远程分支检出到一个新的本地分支,然后使用 diff 命令查看哪个文件引起了冲突。 - CodeWizard
1
冲突永远不可能出现在远程。远程已经有了提交的代码,一旦您尝试更新本地分支,它将显示与正在尝试合并的本地代码冲突。使用此命令来跟踪给定文件的更改:git log --follow <path> - CodeWizard
我该如何检查这些分支之间的差异?对于<path>,它是一个非常深层嵌套的子文件夹,我真的不理解。当我执行reset HEAD --hard <hash>然后推送时,我担心将愚蠢的本地更改推送到服务器上。 - localhost
首先,您可以始终获取当前分支并创建本地副本:git checkout -b <备份分支>。现在您可以进行重置,并在推送之前使用diff或pull命令比较分支以验证您要推送的内容。但是,如果您执行重置,则不应有任何差异。 - CodeWizard
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接