将本地非git工作合并到远程git存储库

将本地非git工作合并到远程git存储库,git,merge,local,rebase,Git,Merge,Local,Rebase,我想将非git启动的文件夹中的工作与远程git存储库合并 以下工作: git init git add git commit git remote add origin [url] git fetch git rebase origin/master git push -u origin master 另一种选择是: git init git add git commit git remote add origin [url] git pull --allow-unrelated-hist

我想将非git启动的文件夹中的工作与远程git存储库合并

以下工作:

git init
git add
git commit

git remote add origin [url]
git fetch
git rebase origin/master
git push -u origin master
另一种选择是:

git init
git add
git commit

git remote add origin [url]
git pull --allow-unrelated-histories origin master
git push -u origin master
但是,
——允许不相关的历史记录
需要编写很长时间(git的创建者不想实现快捷方式,因为“这是一个罕见的案例”),我听说在这种情况下,进行重基比合并更好

你知道更快的方法吗

编辑
长版本:

为了直截了当,我很乐意跳过工作流部分,但以下是我的工作流,以了解原因(我记住了您推荐的工作流,但我不确定它是否适用于我的情况):

  • 我网站的代码在ftp上
  • 我直接在ftp上工作,因为它对我来说更方便
  • 我将ftp文件夹拖放到桌面上,并运行git命令将本地ftp更改与协作者GitHub更改合并
为什么我直接在ftp上工作:
-所有这些都集成在我的IDE中,我可以用一个软件“即时”进行修改
-没有要使用的本地服务器
-无法从本地传输到ftp(除非合作者在GitHub上进行了更改)
-网站的插件不符合我的本地配置,因此我无法拥有合适的本地测试环境
-我以前在本地工作,但由于任何原因将代码传输到ftp时,结果都不一样

我同意这可能是“手工制作”的,但它做得很好,因为我独自编写代码。现在有另一个人,所以我们把代码放在GitHub上,我用提到的git命令解决了代码之间的同步问题。我有代码的写权限,所以我不需要fork/pull请求。我不需要永久保留本地回购协议,所以我更喜欢删除它,但是如果SCM需要我保留所有项目的本地回购协议,我会这样做,但是呃。。。我不喜欢它,因为我不需要它,这就是为什么我在第一条消息中找到了解决方案

你认为我应该有一个更好的工作流程吗?你认为我们是否应该在不同的分支上工作,即使是小的变化(如果它允许有一个更干净的历史,我会这样做,因为我喜欢保持组织和精简,顺便说一下,这就是为什么我使用rebase而不是合并)

事实上,一个大的背景问题是:大型团队如何将他们的GitHub代码与ftp代码同步(在更新repo和实际ftp repo之前,在测试ftp文件夹上检查新的GitHub代码是否正常)?愚蠢的问题:他们从ftp上正确地进行SCM吗(怎么做?这太棒了)

我是SCM的新手,我在问自己所有这些问题

你知道更快的方法吗

这是一个错误的问题。正确的问题是:是什么驱使您在SCM之外做任何工作-在本地或远程回购之外?

将您的工作与远程回购同步的“最快”方式是什么,这一问题是合理的,但由于您尚未提供任何有关工作流程的详细信息,我们无法肯定地回答这个问题

我建议改为使用此工作流:
  • 如果在Github上-如果合适,首先分叉远程repo
  • 在对本地PC执行任何操作之前,请克隆远程repo(或您的fork),以便您可以在本地repo中工作
  • 为此功能/输出创建一个分支,该分支将在将来合并
  • 完成分支中的所有工作,提交并利用Git的SCM创建历史记录,并能够随时恢复更改
  • 如果其他人因任何原因(例如,如果您请求帮助)能够看到正在进行的工作,并向您提供备份,则定期将您的分支推到远程
  • 当准备合并时,只要发出一个pull请求,如果合适的话(或者在您自己的fork中),并允许代码/工件审查;或者,只要合并到主,如果这是如何运作这个项目
  • 我们可能会推荐一些更详细的替代策略,但我认为你让事情变得更复杂了,尤其是在合并与重新基础的问题上,这一定意味着在远程回购中,唯一的分支是master(!)-你熟悉维护多个开发的Gitflow模型吗,例如,实验分支?您熟悉在Git中进行分支和合并有多容易吗

    Git是为分布式源代码管理而设计的,所以就用它吧!(即在开发过程中在本地使用)。


    针对添加到问题中的较长历史记录进行了更新 如果我正确理解你的情况,我认为上述方法仍然有效。我建议您在本地PC上创建Github repo的镜像,您总是将其保存在那里。您仍然可以通过FTP在服务器上进行所有更改,因为您说这更方便-但我会小心,因为(如果我理解正确的话),您正在更改live web站点。如果这适用于您的情况(包括在不首先测试新版本的情况下这样做的危险),那么也没关系

    考虑到您的具体情况,我会尝试以下两种方法-但我不能100%确定Git将如何与FTP交互(也就是说,希望它不会刷新现有文件上的日期或任何其他导致Git将其视为已更改的内容)

  • 继续做你正在做的事情-除了在你的本地PC上留下一个本地回购。这个方法只会将你的更改作为一个新的提交给主服务器转储

    • 对FTP站点进行新更改
    • 准备将更新添加到repo时,在从FTP下拉之前,将远程服务器提取到本地服务器,以获取远程服务器上的任何新提交
    • 将您的更改从FTP下拉到本地repo,只需覆盖任何现有文件。如果这是我认为的方式,那么git状态将只显示此时更改的文件
    • 执行
      git添加。
      将所有更改添加到ind
      > git clone [repo URL]
      > cd [repo name]
      > mv ../[folder name of your stuff] .
      > git add .
      > git commit -m "added my stuff in folder [folder name of your stuff]"