我已将原始存储库分叉到我的github帐户并将其克隆到我的工作区中。在我的本地分支上工作一周后,我想将我的本地分支推送到我的分叉存储库,然后将其与原始存储库合并。但我可以看到我在本地分支中修改过的文件也在原始存储库中被修改过。我可以想到两种方法可以安全地合并我的本地分支。
browser.executeScript('window.scrollTo(0,200);').then(function () {
从原始存储库获取最新更改到我的本地分支?在这种情况下,将覆盖整个文件,或者仅保留原始存储库中已更改的文件的一部分,以保留我的本地更改。git pull
仅在文件中存在同一行的两个不同版本时才考虑冲突。如果文件的两个版本在文件的不同部分中有变化,则可以安全地合并它们。 我还不清楚Git
何时合并两个版本的文件。它如何决定哪个版本的文件优先于另一个版本。
欢迎采取任何其他方法。
答案 0 :(得分:1)
首先,在这种情况下,很难避免冲突,并且通常与其他人一起处理同一个存储库,您应该准备好偶尔解决冲突。
在你的情况下,我会使用git rebase
并使用git branches,这在使用得很好时是一个非常有用的功能。
创建对原始存储库的拉取请求。
// I assume that your local master branch is set up to track origin/master branch, where origin is your forked version of the original repository.
// 1. Local branch named "my-new-feature"
$ git branch my-new-feature
// 2. Reset your master branch back to the state before changes
$ git fetch origin
$ git reset --hard origin/master
// 3. Update local master branch. First you need to add the original repository as a remote (let's name it "upstream")
$ git remote add upstream https://github.com/some-user/some-project.git
$ git fetch upstream
// you should still be on your local master branch. Now update this local branch with changes from the original repo
$ git rebase upstream/master
// 4. Push your local master to your forked repository
$ git push origin master
// 5. Rebase your changes onto master
$ git checkout my-new-feature
$ git rebase master
// This is the place where you are most likely to have conficts. Read git messages, as it helps you what to do.
// Once all conflicts have been resolved, stage your changes but do not commit. If committed they will not be detected by ongoing rebase.
$ git add .
$ git rebase --continue
// 6. Push your local branch with newest changes
$ git push origin my-new-feature
// 7. Issue a pull request on GitHub using your just pushed branch
此外,git
根据合并的方向合并两个文件。如果您在分支A分支上,并且运行git merge B-branch
,则 B-branch 中的文件具有“更高优先级”,并且他们的更改很可能会自动应用。
答案 1 :(得分:0)
我会建议您列出的第一个approch:从原始repo冷杉中拉出更改 t。原因如下:
从原始仓库中提取更改仅覆盖部分文件而非覆盖所有文件。情况如下:
要从原始仓库中提取更改,最好使用--rebase
选项(首先从原始仓库中提取更改,然后在最新的原始仓库顶部应用您的本地更改:
git pull <remote> <branch> --rebase
假设在git fetch
之后提交histroy如下(origin
是fork repo的远程,upstream
是原始repo的远程):
…---A---B---C---D---E master, origin/master
\
F---G---H upstream/master
然后你可以执行以下命令:
git pull upstream master --rebase
git push origin master -f
然后提交历史记录将是:
…---A---B---F---G---H---C'---D'---F' master, origin/master
|
upstream/master
然后,您可以创建PR以将fork repo master
分支合并到原始仓库中。对于PR查看者和审批者来说会很方便。