在合并

时间:2018-05-27 08:58:42

标签: git

假设我有2个用户在同一个分支上工作(主)。

(我知道这不是一个好习惯,但它是一个例子)

第一位用户有什么:

git clone <repository_url>
cd myproject
touch file1.cpp
git add file1.cpp
git commit -m "file 1 creation"

第二位用户:

git clone <repository_url>
cd myproject
touch file2.cpp
git add file2.cpp
git commit -m "file 2 creation"

第一位用户:

git push origin master

第二位用户:

git pull

此时,git正在进行合并。 我正在开发不同的环境(Linux,Mac,Windows)。

有时,git会自动创建分支。在这种情况下,我在我的bash提示符前缀(在$之前)看到master | MERGING 有时,我什么也看不见。

所以我的问题是:当我进行合并操作时,git是否会创建分支?

由于

4 个答案:

答案 0 :(得分:1)

执行git pull与执行git fetch后跟git merge相同。在第二个用户合并结束时,Git将创建一个新的合并 commit ,但它本身不会创建一个新的分支。

您在控制台上看到的master|MERGING只意味着Git正处于合并操作的中间。

答案 1 :(得分:0)

在您描述的步骤中,git pull将远程分支(origin/master)合并到本地master分支中。正如Tim的回答所示,它会在您的本地master分支上创建合并提交。

回答您的问题:两个分支都是在git clone操作期间创建的。 git fetch更新本地存储库中origin/master的状态(到服务器上的当前状态)。

答案 2 :(得分:0)

它不会创建新分支。第二个用户(例如任何用户)将拥有master的本地副本。通过运行git pull,远程更改为fetchedmerged。如果存在冲突的更改,则合并将失败。

最佳处理方式是,对于第二个用户来说:

git pull --rebase 

这将拉出远程更改并将其应用于其本地提交之上,然后可以将其推送到远程Master。

答案 3 :(得分:0)

是的,git正在创建所谓的“合并提交”。

如果您想避免这种情况,每次拉动时都应该使用public boolean solution(int[] A, int k) { int n = A.length; for (int i = 0; i < n - 1; i++) { if (!(A[i] == A[i + 1]) && !(A[i] == A[i + 1] - 1)) { System.out.println(A[i] + "-->" + A[i + 1]); return false; } } if (A[0] != 1 || A[n - 1] != k) { return false; } else { return true; } } 。这样git就可以“拉动”并跳过创建“marge commit”

但是你应该记住,git pull --rebase选项强迫你处理潜在的冲突。