我已经开始玩Git并遇到过"上游"和"下游"这两个词.我之前见过这些,但从未完全理解它们.这些术语在SCM(软件配置管理工具)和源代码的上下文中意味着什么?
这可能听起来像是一个基本的问题,但我已经寻找答案,我现在比以前更困惑.
当我的分支合并到我的另一个分支时,git中的"我们的"和"他们的"是什么意思?两个分支都是"我们的".
合并冲突是"我们的"总是显示两个版本的上部?
"我们的"总是指合并开始时HEAD指向的分支吗?如果是这样,那么为什么不使用像"当前分支"这样的明确的所有格引用而不是使用像"我们的"这样的所有格代词,这些代词是引用模糊的(因为这两个分支在技术上都是我们的)?
或者只是使用分支名称(而不是说"我们的"只是说"本地主人"等)?
对我来说最令人困惑的部分是我在特定分支的.gitattributes文件中指定.让我们说在测试分支中我有以下.gitattributes文件:
config.xml merge=ours
Run Code Online (Sandbox Code Playgroud)
现在我结账并指出HEAD为master然后合并测试.由于master是我们的,并且test的.gitattributes没有签出,它甚至会产生影响吗?如果它确实有效果,因为主人现在是"我们的",那么会发生什么?
在Git rebase之后,在其他情况下,您可以在报告中找到我们标记为已删除的一些文件git status.根据Git,我们是谁?为什么?
它指的是我坐在这个分支上它是否适合我?或者它是指自己和在分支机构工作的人我反对?
我刚刚在git中将一个分支合并到了我的主人中,我得到了Automatic merge failed; fix conflicts and then commit the result.现在我跑了git mergetool,vimdiff打开了下面的图像.我不知道如何使用vimdiff.这里的每个小组意味着什么,我应该如何解决合并冲突?

好的.如果我在一个分支上(比方说working),并且我希望合并来自另一个分支的更改(比方说master),那么我git-merge master在working分支上运行命令,并且更改将合并而不会重新定义历史记录.如果我运行git-rebase master,那么更改master将被重新放置在我的working分支的顶部.但是,如果我想合并更改master但是将我的更改working重新组合在一起,该怎么办?我怎么做?可以吗?
我可以git-rebase working在我的master分支上运行以将我的更改放在master分支的顶部,但我希望能够在我的working分支中执行此操作,而我不知道如何.我能想到的最接近的是创建一个新的分支master,然后working在其上更改rebase 的变化,但之后我会有一个新的分支而不是改变working分支.
我知道如何解决这个问题:
user@host$ git pull
Updating 9386059..6e3ffde
error: Your local changes to the following files would be overwritten by merge:
foo.bar
Please, commit your changes or stash them before you can merge.
Aborting
Run Code Online (Sandbox Code Playgroud)
但是,是不是有办法让git pull做stash和pop舞蹈给我吗?
如果此命令具有不同的名称,则可以.
创建shell别名git stash; git pull; git stash pop是一种解决方案,但我寻找更好的解决方案.
假设我通过git存储库与某人合作,并且有一个特定的文件,我永远不想接受任何外部更改.
有没有办法让我设置我的本地仓库,以便每当我拉动时不抱怨冲突的合并?我想在合并此文件时始终选择我的本地版本.
我使用git-svn并且我注意到当我必须在执行a之后修复合并冲突时,例如和的选项git svn rebase的含义是相反的.也就是说,如果存在冲突并且我想保留来自SVN服务器的版本并丢弃我在本地进行的更改,我必须使用,当我期望它.--ours--theirsgit checkoutourstheirs
这是为什么?
例:
mkdir test
cd test
svnadmin create svnrepo
svn co file://$PWD/svnrepo svnwc
cd svnwc
echo foo > test.txt
svn add test.txt
svn ci -m 'svn commit 1'
cd ..
git svn clone file://$PWD/svnrepo gitwc
cd svnwc
echo bar > test.txt
svn ci -m 'svn commit 2'
cd ..
cd gitwc
echo baz > test.txt
git commit -a -m 'git commit 1'
git svn rebase
git checkout --ours test.txt …Run Code Online (Sandbox Code Playgroud) 假设我在master上重新定义实验分支,文件中存在冲突.当然,两个分支都删除了文件.因此,当我解决冲突时,在我看到和.它非常令人困惑.有什么办法可以理解他们的意思吗?谁是他们,谁是我们?git statusdeleted by usdeleted by them
或者在重新定位时有另一种方法可以知道哪个文件被哪个分支删除了?喜欢打印分支名称?
当我跑步时git status,这就是我所看到的:
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
You are in the middle of an am session.
(fix conflicts and then run "git am --continue")
(use "git am --skip" to skip this patch)
(use "git am --abort" to restore the original branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- …Run Code Online (Sandbox Code Playgroud) git ×10
git-merge ×2
git-rebase ×2
merge ×2
definition ×1
gerrit ×1
git-pull ×1
git-stash ×1
git-svn ×1
mergetool ×1
rebase ×1
terminology ×1
versioning ×1
vim ×1