我必须与 2 个开发人员建立分支并进行合并:
git checkout main
Already on 'main'
Your branch is ahead of 'origin/main' by 8 commits.
(use "git push" to publish your local commits)
将更改推送到主分支时出错
localos:/path_project$ git push -u origin main
Password for 'https://myaccount@github.com':
To https://github.com/client_name/project_name.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://myaccount@github.com/client_name/project_name.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
但我是最后一个推送到 main 并运行 git stash 的人,因此我运行了修复错误:
localos:/path_project$ git stash apply
CONFLICT (rename/delete): resources/views/adminside/project_product_brand/index.blade.php deleted in Stashed changes and renamed to resources/views/adminside/platform/index.blade.php in Updated upstream. Version Updated upstream of resources/views/adminside/platform/index.blade.php left in tree.
CONFLICT (rename/delete): resources/views/adminside/project_product_brand/edit.blade.php deleted in Stashed changes and renamed to resources/views/adminside/platform/edit.blade.php in Updated upstream. Version Updated upstream of resources/views/adminside/platform/edit.blade.php left in tree.
CONFLICT (rename/delete): resources/views/adminside/project_product_brand/create.blade.php deleted in Stashed changes and renamed to resources/views/adminside/platform/create.blade.php in Updated upstream. Version Updated upstream of resources/views/adminside/platform/create.blade.php left in tree.
CONFLICT (modify/delete): public/js/app.js deleted in Updated upstream and modified in Stashed changes. Version Stashed changes of public/js/app.js left in tree.
CONFLICT (rename/delete): app/Http/Requests/ProjectProductBrandRequest.php deleted in Stashed changes and renamed to app/Http/Requests/PlatformRequest.php in Updated upstream. Version Updated upstream of app/Http/Requests/PlatformRequest.php left in tree.
不确定我与上一个错误有什么关系?
答案 0 :(得分:1)
命令 git push -u origin main
失败,因为与您的本地分支相比,远程中的某些内容是新的。这通常意味着其他人将提交推送到那里,但也可能是您更改了本地历史记录,例如修改提交或执行交互式变基。
请注意,如果您希望本地存储库“知道”任何远程更改,您需要运行 git fetch
。您收到消息 Your branch is ahead of 'origin/main' by 8 commits.
的事实意味着,根据上次 git fetch,远程分支中没有任何新内容,但之后可能会出现新内容。由于您在尝试推送更改时遇到拒绝错误,您应该运行 git fetch
和 git status
,并且很可能您会收到如下消息:
你的分支和'origin/main'有分歧,有X和X 各自不同的提交。
在这种情况下,您应该在推送之前更新您的本地分支,使用 git pull
或 git pull --rebase
,解决 pull
可能导致的任何冲突,然后您就可以准备好git push
。
关于 git stash
,看起来应用您隐藏的更改会产生一些冲突。这看起来像是一个不相关的问题,但我假设您尝试了多种方法来解决同一问题。我认为解释冲突不是错误很重要,但在合并 2 个分支时,git 不知道如何解决差异。每当您在执行 pull
、stash apply
或其他操作(rebase、merge、cherry-pick 等)时遇到冲突,您可以通过编辑每个冲突的文件来手动解决冲突。每个冲突都会被标记为:
...
<<<<<<< destination:xxxxxxxxxxxxxx
... // version in destination branch
=======
... // version in original branch
>>>>>>> source:xxxxxxxx
...
所以你有两个版本,并且可以决定这些行的结果版本应该是什么。请注意,您在那里有提交哈希,您可以随时使用 git show xxx
来确保哪个提交是您要应用的提交。一旦您解决了文件中的所有冲突(保留“正确”版本并清除所有冲突标记),您可以git add <file>
将该文件标记为已解决。
一旦您解决了所有文件中的所有冲突,您就可以继续您正在执行的操作。一些 git 操作有一个 --continue
标志在解决冲突后继续(git rebase --continue
或 git cherry-pick --continue
),但是如果你在做一个“不太干净”的操作,比如拉动没有 {{ 1}} 或应用 git stash,您将需要手动创建解决与 --rebase
冲突的提交。
最后,如果它在您尝试不同的事情时对您有所帮助并且可能会造成一些混乱,请记住您创建的每个提交都是独一无二的,即使您重新定位,您也始终可以恢复过去的任何版本、应用的隐藏等。使用 git commit
您可以看到您移动过的所有版本。并且许多操作还有一个 git reflog
标志来中止它们,以防您无法解决冲突。如果您需要撤消任何混乱,--abort
和 git reset
可能也可以帮助您将分支重置为不同的版本。