git push - 我的提交哈希 - git log没有显示在历史MIRROR存储库中

时间:2016-12-22 03:25:26

标签: git github git-commit git-log git-hash

我是从GIT存储库克隆的(最新的)。此时,存储库中的最新提交是:a10cb09

我克隆了使用以下命令(我在我的小包装脚本中设置了变量r =传递的第一个参数(对于repo name aka ansible):

  git clone git@github.com:mycompany/${r}.git

并做了一些更改并执行了以下简单步骤:(即进行更改,添加文件/文件夹,提交和推送),我得到了一个新的提交哈希a08c263(简短)。

[arun@ip-10.20.30.33 ~/aks/always-latest-ws-repogroup/ansible] $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    roles/mycompany.mycompany-ansible/
    mycompany-ansible.yml

nothing added to commit but untracked files present (use "git add" to track)
[arun@ip-10.20.30.33 ~/aks/always-latest-ws-repogroup/ansible] $ 


[arun@ip-10.20.30.33 ~/aks/always-latest-ws-repogroup/ansible] $ git add mycompany-ansible.yml roles/mycompany.mycompany-ansible

[arun@ip-10.20.30.33 ~/aks/always-latest-ws-repogroup/ansible] $ git commit -m "mycompany.mycompany-ansible playbook and role" mycompany-ansible.yml roles/mycompany.mycompany-ansible 
[master a08c263] mycompany.mycompany-ansible playbook and role
 14 files changed, 1771 insertions(+)
 create mode 100644 roles/mycompany.mycompany-ansible/README.md
 create mode 100644 roles/mycompany.mycompany-ansible/defaults/main.yml
 create mode 100644 roles/mycompany.mycompany-ansible/handlers/main.yml
 create mode 100644 roles/mycompany.mycompany-ansible/meta/.galaxy_install_info
 create mode 100644 roles/mycompany.mycompany-ansible/meta/main.yml
 create mode 100644 roles/mycompany.mycompany-ansible/tasks/apt_install.yml
 create mode 100644 roles/mycompany.mycompany-ansible/tasks/main.yml
 create mode 100644 roles/mycompany.mycompany-ansible/tasks/yum_install.yml
 create mode 100644 roles/mycompany.mycompany-ansible/templates/10-statsd.conf.j2
 create mode 100644 roles/mycompany.mycompany-ansible/templates/10-mycompany.conf.j2
 create mode 100644 roles/mycompany.mycompany-ansible/templates/proxy_auth_credentials.set.j2
 create mode 100644 roles/mycompany.mycompany-ansible/templates/telegraf.conf.wfcopy.j2
 create mode 100644 roles/mycompany.mycompany-ansible/templates/mycompany-proxy.conf.j2
 create mode 100644 mycompany-ansible.yml
[arun@ip-10.20.30.33 ~/aks/always-latest-ws-repogroup/ansible] $ 


[arun@ip-10.20.30.33 ~/aks/always-latest-ws-repogroup/ansible] $ git push
Counting objects: 21, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (21/21), 18.65 KiB | 0 bytes/s, done.
Total 21 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:repogroup/ansible.git
   a10cb09..a08c263  master -> master
[arun@ip-10.20.30.33 ~/aks/always-latest-ws-repogroup/ansible] $  


[arun@ip-10.20.30.33 ~/aks/always-latest-ws-repogroup/ansible] $ git log -1 --pretty=format:%h 
a10cb09


[arun@ip-10.20.30.33 ~/aks/always-latest-ws-repogroup/ansible] $ git rev-parse a08c263
a08c263
fatal: ambiguous argument 'a08c263': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

当我要去Github回购看看我的最新变化时,它不存在。 git log也没有显示我的提交(相反,它向我显示了提交之前位于顶部的提交哈希)。我错过了什么?

好像我甚至看不到使用git rev-parse a08c263(小哈希)的长哈希。

$ git remote -v
origin  git@github.com:mycompany/ansible.git (fetch)
origin  git@github.com:mycompany/ansible.git (push)

$ git reflog 
a10cb09 HEAD@{0}: clone: from git@github.com:mycompany/ansible.git

PS :如果我对位于mycompany repo组下的其他存储库执行相同的步骤,并且所有这些存储库都会在github中成功提交我的提交/推送更改,如果我遵循类似的步骤。

更新:我的某个浏览器页面仍处于打开状态。在我做了提交+推送之后,我能够看到我提交的更改(新的哈希a08c263作为顶级仓库级别的最新提交)。当我点击它时,它打开了这个附加的浏览器页面,在那里我可以看到FULL哈希以及文件夹/文件。如果我访问我提交的打开的浏览器URL,它仍然存在(所以Git确实保存了一些东西)但是点击了存储库的根级别,即ansible,最新的提交不是我的提交+推送(新哈希)但是它列出a10cb09作为最新的一个(每个快照是我新生成的哈希的父哈希)。见这里:

enter image description here

现在提出了主要问题:

  1. 如果我没有打开这个浏览器页面,那么我如何获得长哈希和我的文件夹/文件(内容)?

  2. 如果我是从github.com/mycompany/ansible(repo)克隆的,它是ansible存储库的MIRROR,实际上是在Phabricator中托管的(实际的原始存储库克隆URL将与我在我上面的小脚本,然后我应该用什么命令/选项将我的新更改推送到原始的Phabricator ansible存储库?

  3. 如果我在结束时完成了commit + push,为什么git log和其他类似的git命令没有显示任何针对我的新哈希的信息?

1 个答案:

答案 0 :(得分:1)

  

访问该链接仍然有效,向我显示我提交的文件/文件夹,但如果我点击Github中的根存储库,它不会显示我的提交最新

这意味着:

  • 远程仓库的默认分支不是主
  • 或某些挂钩(post-receive?)将HEAD设置或重置为其他SHA1
  

我克隆的这个ansible repo,并没有在github.com上主持。在我的案例中,ansible repo在Phabricator中托管,并在Github.com上进行了MIRRORED(从我克隆的地方)它

这可以解释重置。

  

最大的担心是如何将我的文件夹/文件从a08c263提交回我的工作区。 git log或git rev-parse没有显示任何内容/抛出错误,因为根据Git不存在该哈希。

当然:从另一个本地文件夹中的github克隆,将您以前的克隆文件夹添加为远程仓库,获取并挑选您的提交:

git clone https://github.com/... newfolder
cd newfolder
git remote add old ../path/to/first/clone
git fetch old
git cherry-pick a08c263
git push

但是你需要确保你有权回到GitHub回购。