需要将更改从本地git分支推送到另一个远程git存储库分支,并且推送到分支的这些更改将与远程URL中存在的主服务器进行比较,并且更改将合并。
我到目前为止已经创建了一个本地git存储库,
使用下面的命令
初始化一个简单的本地git repo git init
将现有文件添加到存储库,并使用以下命令将其添加到暂存区域
MacBook-Pro: $ git add *.h
MacBook-Pro: $ git add *.m
使用以下命令
检查状态MacBook-Pro: $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: test.h
# new file: test.m
#
致力于他们,
git commit -m"Added test base files"
现在创建了一个名为issue_fix的新分支,
MacBook-Pro:$ git branch issue_fix
通过检查分支机构开始在分支机构工作。
MacBook-Pro: $ git checkout issue_fix
对分支机构做了很少的提交。一切都很好。
现在我处于这样一种情况,我需要将我对'issue_fix'分支所做的更改推送到这样的远程存储库URL
https://github.com/myaccountname/project.git
我的更改将被推送到给我的分支名称,或者如果分支不可用,我需要创建一个远程分支并将我在本地分支中的更改推送到该分支。
最重要的推送更改将与给定存储库URL中的master进行比较,如果一切正常,它将与master合并。因此,我将始终将我的更改从本地推送到远程分支。
问题发生的原因是我在开始时没有给出克隆URL,只提供了源代码,因此我创建了一个本地git存储库并开始处理,现在提供了存储库URL并要求将我的更改推送到分支
我想知道,在第一种情况下这是否可行?。如果可能的话,请给我一些命令,让它运转起来。
答案 0 :(得分:4)
要解决这个问题(我之前也遇到过这些问题。他们已经死了很烦)你可以尝试做以下事情:
主存储库
A-B-C-D-E-F-G-H
您的存储库
A'-B'-C'-D'
G
中的代码与本地A'
中的代码相同,但它们不共享相同的历史记录
git clone https://....
这将为您提供代码库的工作副本,更重要的是,还将提供其历史记录。
主存储库的克隆
A-B-C-D-E-F-G-H
在与您的repo不同的文件夹中
A'-B'-C'-D'
git fetch ../messed-up-repo
其中../messed-up-repo
是第二个存储库的路径。
这将从其他仓库中提取所有更改,而不合并它们。原因是你的分支机构找不到与主分支共同的祖先,因此将它们合并起来很困难甚至不可能。
主存储库现在看起来像这样:
A-B-C-D-E-F-G-H # master
/
\
------------A'-B'-C'-D' # messy
git branch new-featurebranch aabbccdd
其中aabbccdd
是您下载存储库时的提交ID。这将在您下载的提交中创建一个新分支。你猜得越好
价值,你以后会有更少的冲突。
- # new branch
/
A-B-C-D-E-F-G-H # master
/
\
------------A'-B'-C'-D' # messy
git checkout messy-featurebranch
git rebase -i new-featurebranch
这将显示一个编辑器,其中包含分支中所有提交的列表。第一个可能是“我下载了代码的副本,但没有正确克隆它”提交。 删除该行。然后,所有其他提交都应无缝应用。
-B'-C'-D' # new branch
/
A-B-C-D-E-F-G-H # master
/
\
------------A' # messy
答案 1 :(得分:3)
Git在大多数业务中分发并在本地工作;在本地创建分支或提交时,远程是否存在并不重要。当你进行推动时,它必须存在。
因此,您可以添加远程存储库,然后将分支推送到它。如果分支不存在,将远程创建分支。
git remote add github-repo https://github.com/myaccountname/project.git
git push github-repo issue_fix
答案 2 :(得分:0)
由于它似乎是一个非常少的版本,我建议只是克隆主要仓库(在新目录中),然后用自己的文件覆盖它们的文件并进行新的提交。
否则没有“简单的方法”来做,但可能有一些提示:
https://github.com/myaccountname/project.git
git remote add old /path/to/old/repo/
现在有几个选项,根据最适合您的方式:git cherry-pick <1st sha1 you want>..<last commit (probably old/issue_fix)>
似乎符合您的需求,但如果不是,您可以尝试git rebase --interactive
Nils,但如果你做的第一次提交不是空提交。