在想到我终于想出了git之后,我现在发现自己对我所看到的git行为非常困惑 - 每当我推动所做的更改并将其提交到我的本地机器到我的原始git存储库时,这些更改立即得到暂停在原始服务器上撤消.咦??!?
我有一台机器(机器A),上面有一个项目的git存储库; 该机器正在运行SSH服务器,我配置了一个帐户,以便我可以远程连接它并克隆git repo.然后我在机器B上使用git克隆了repo:
git clone ssh://username@remote.host/path/to/repo
没有问题.我在机器B上对项目进行了更改,并将这些更改提交到B上的git存储库.然后,我将更改推送回机器A上的源存储库:
git push master origin
这很好; 在机器B上,输出git remote show origin显示原点是最新的:
$ git remote show origin
* remote origin
Fetch URL: ssh://username@remote.host/path/to/repo
Push URL: ssh://username@remote.host/path/to/repo
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (up to date)
Run Code Online (Sandbox Code Playgroud)
但是,当我去机器A做一个时git status,我看到我刚刚推动的所有变化现在都被淘汰了!
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: build-fatjar.xml
# deleted: src/monitor/config/client-lm-prod.xml
# modified: src/monitor/config/quartz-baseconfig.xml
# modified: src/monitor/service/task/BaseTask.java
# new file: src/monitor/service/task/CheckForCorrections.java
# deleted: src/monitor/service/task/CheckForDuplicates.java
# deleted: src/monitor/service/task/ProcessCorrections.java
# renamed: src/monitor/test/CheckForDuplicatesTest.java -> src/monitor/test/CheckForCorrectionsTest.java
# deleted: src/monitor/test/ProcessCorrectionsTest.java
# modified: src/monitor/test/TaskTestCase.java
Run Code Online (Sandbox Code Playgroud)
将原始存储库(机器A)置于与机器B上的状态相同的状态的唯一方法是git reset HEAD重置所有要提交的更改,然后重置每个更改git rm; 否则,git commit机器A上的下一个将撤消我刚从机器B推出的所有内容.
我已经阅读了每一个我可以得到的参考资料,没有提到这种行为; 同样,我也无法在网上找到它的参考.有任何想法吗?
听起来你正在推动一个非裸仓库(即一个在磁盘上签出文件的仓库).Git会更新repo,但不会更新已签出的文件,因此看起来好像有等待上传的更改.修复是做两件事之一:
git archive)到服务器上的另一个地方,或者git checkout或某些更新磁盘文件.您可以在此Stack Overflow问题或本方法文章中阅读更多内容.
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |