【问题标题】:Handling line endings for git处理 git 的行尾
【发布时间】:2016-01-12 16:34:17
【问题描述】:

这是我到目前为止搞砸的,

  1. 我将一个 rails 项目从 windows 复制(未克隆)到 linux pc

  2. 然后新建了一个分支,做了很多改动

  3. 最后提交了两次整个项目并将其推送到带有 windows 行结尾的远程存储库。

问题:所以我的问题是,由于我将项目从 windows 复制到 linux,当我运行 git status 整个项目显示已修改。我没有看到我具体所做的更改。由于我提交并推送了整个项目,因此我丢失了文件更改的历史记录。

需要什么:所以我想删除我的最后两个提交,但我想保留我所做的更改。然后我想将行结尾从 windows 转换为整个项目的 unix,这样当我运行 git status 时,我只看到我更改的文件,而不是整个项目。然后我想提交并推送到远程。

如果有解决这个问题的办法就好了。

我不确定这是否会有所帮助,我正在开发一个 Rails 项目,而我的 IDE 是 ruby​​mine。

【问题讨论】:

  • 当你说你想删除你最近的 2 个提交并保留更改时,你的意思是在 repo 中保留更改吗?
  • 我想将更改保留在本地

标签: linux git unix newline line-endings


【解决方案1】:

要撤消你最近的两次提交,运行这个:

  1. git reset --soft HEAD~2。这会将提交中涉及的文件放入您的工作目录中。
  2. 运行git status,它们将显示为分阶段更改(准备好提交)。
  3. 编辑您的文件。
  4. 暂存并提交您的更改。 重要提示:不要推动
  5. 运行git pull
  6. 运行git push

确保您提交更改并在git push 之前执行git pull,否则您的推送尝试将导致冲突并被拒绝。

【讨论】:

  • 我一直在阅读有关 git 命令的内容,看来我应该使用 git revert 而不是 git reset ,因为我已经推送了我的提交。
  • @user1670773 我对git revert 的体验有限,所以我无法提供进一步的建议。我所知道的是我已经使用并测试了上面详述的方法,但这并不是说它是“正确”的方法。
【解决方案2】:

您可以使用git filter-branch。 类似问题here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    相关资源
    最近更新 更多