0

我在使用 git 时遇到了一个非常奇怪的问题。我有一个 ruby​​ 应用程序在运行在 runit 管理下的服务器上。此应用程序具有自动更新功能。它执行git ls-remote以检查是否需要拉取和服务重新启动。这部分工作正常,执行内容并拉取文件,但是:拉取之后,所有拉取的更改都保留在"changes not staged for commit". 执行git reset --hardrepo 后,没有为提交进行任何更改,但 repo 的本地副本显示它领先于origin/branchX 次提交。

我不确定为什么会发生这种情况以及如何解决问题。有没有人经历过类似的事情?任何指针表示赞赏。

软件在 Ubuntu 12.04、ruby 1.9.3p448 上运行,为简单起见以 root 身份运行(runit 作为 root 运行)。文件具有正确的权限,至少看起来是这样。

代码可以在这里看到:https ://github.com/radekg/rgossip_app/blob/dev/lib/updater.rbgit pull和 都不起作用。git fetchgit reset

*更新:*

git status返回:

root@ip-10-222-29-69:/opt/rgossip# git status
# On branch dev
# Your branch is ahead of 'origin/dev' by 1 commit.
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   README.md
#
no changes added to commit (use "git add" and/or "git commit -a")

git diff

root@ip-10-222-29-69:/opt/rgossip# git diff
diff --git a/README.md b/README.md
index e7136db..e9d7360 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
 Managing Chef boxes with gossip.

-More description soon. Testing.
\ No newline at end of file
+More description soon.
\ No newline at end of file

这就是这个提交:https ://github.com/radekg/rgossip_app/commit/176e7cf764ff9ea0299ef75a21bb79a5bea11406

执行后git reset --hard我得到:

root@ip-10-222-29-69:/opt/rgossip# git reset --hard
HEAD is now at 176e7cf Testing with commits seems stupid.
4

1 回答 1

0

git pull 基本上是 git fetch 后跟 git merge。如果您完成了合并,您将领先于原点/分支,因为原点/分支上不存在该合并。

你真的不应该在自动脚本中使用合并,这是一个可能需要人工交互的命令,你应该使用 git fetch 和 git checkout。

于 2013-08-28T07:56:01.783 回答