git fetch 不会覆盖任何内容
git fetch 只是更新(并创建)本地存储库中对远程存储库的引用。在您的情况下,这将创建一个名为 origin/deployment-scripts 的引用。初始获取将如下所示:
$ git fetch
From https://my.username@bitbucket.site.com/scm/dev.repo.git
* [new branch] deployment-scripts -> origin/deployment-scripts
这意味着信息是从给定的 url 中获取的,其中创建了一个名为 deployment-scripts 的新分支,在您的本地存储库中为此创建了一个名为 origin/deployment-scripts 的引用。
未来的git fetch 可能与此类似:
$ git fetch
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://my.username@bitbucket.site.com/scm/dev.repo.git
fa09a74..03350ff deployment-scripts -> origin/deployment-scripts
输出的前三行包含有关获取数据的一些统计信息,接下来是您获取数据的 URL,然后您可以看到分支部署脚本自上次以来已从 fa09a74 更改为 03350ff fetch 和本地引用分别更新。
您的git push 可能不起作用
我假设您在 bitbucket 中创建的分支 deployment-scripts 是从某个其他分支分支出来的,因此包含该分支的提交(至少在 Bitbucket 服务器中,无法创建空分支)。在这种情况下,您的推送将失败,因为远程分支和本地分支都具有另一个没有的更改:
$ git push origin deployment-scripts
To https://my.username@bitbucket.site.com/scm/dev.repo.git
! [rejected] deployment-scripts -> deployment-scripts (non-fast-forward)
error: failed to push some refs to 'https://my.username@bitbucket.site.com/scm/dev.repo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
在这种情况下,需要合并才能将两个版本合并在一起,而推送永远不会发生这种情况。无论如何,这不是您想要实现的,因为结果将是一个分支,其中包含来自您本地 deployment-scripts 分支的文件和作为在 Bitbucket 中创建 deployment-scripts 的基础的分支。
你如何解决它
删除分支并通过推送创建它
您可以只删除 Bitbucket 中的分支 deployment-scripts 并将其从本地存储库中推送,然后它将在 Bitbucket 中创建分支(至少如果您的用户被允许创建分支):
$ git push origin deployment-scripts
Counting objects: 3, done.
Writing objects: 100% (3/3), 250 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://my.username@bitbucket.site.com/scm/dev.repo.git
* [new branch] deployment-scripts -> deployment-scripts
强制推送分支
或者,您可以执行 git push --force,它会覆盖 Bitbucket 上的提交,从而强制您的推送工作。
$ git push --force origin deployment-scripts
Counting objects: 3, done.
Writing objects: 100% (3/3), 250 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://my.username@bitbucket.site.com/scm/dev.repo.git
+ 524095e...87e6bd7 deployment-scripts -> deployment-scripts (forced update)
注意:正如我所说,这将删除所有在远程 (Bitbucket) 分支中而不是在本地分支中的提交,并且只有在您确定这是正确的做法时才应使用。