问题标签 [git-branch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 为什么git默认执行快进合并?
来自 mercurial,我使用分支来组织功能。自然,我也想在我的历史中看到这种工作流程。
我使用 git 开始了我的新项目并完成了我的第一个功能。合并功能时,我意识到 git 使用快进,即如果可能,它会将我的更改直接应用到主分支,而忘记我的分支。
所以想想未来:我是唯一一个在这个项目上工作的人。如果我使用 git 的默认方法(快进合并),我的历史将导致一个巨大的主分支。没有人知道我为每个功能都使用了一个单独的分支,因为最终我将只有那个巨大的 master 分支。会不会显得不专业?
通过这种推理,我不希望快进合并,也看不出它为什么是默认值。它有什么好?
git - 如何从另一个分支完全替换 Git 中的主分支?
我的 Git 存储库中有两个分支:
master
seotweaks
(最初创建自master
)
我创建seotweaks
的目的是快速将其合并回master
. 然而,那是三个月前的事了,这个分支中的代码比master
.
它实际上已成为我们的工作主分支,因为其中的所有代码master
现在或多或少已经过时了。
我知道的非常糟糕的做法,吸取了教训。
你知道我如何用 中的内容替换master
分支的所有内容seotweaks
吗?
我可以删除所有内容master
并合并,但这并不是最佳实践。
git - 可以合并/变基非直接关系分支吗?
作为集成测试,我想在将它们与我的主人合并之前加入几个分支。
他们都偏离了主人,走自己的路。这是正确合并没有直接关系的不同分支(例如父/子)?
重新加入分支机构有什么好的做法吗?
在此先感谢,劳尔。
git - 如何查找分支是本地跟踪的分支还是用户创建的本地分支?
我在本地存储库中使用“git branch -b branch-name origin/branch-name”在本地跟踪了一个远程跟踪分支。我的远程分支是 test2/test2 (origin/branch-name),它在本地被跟踪为 test2。
原点也被命名为 test2。我还没有签出我的本地跟踪分支 test2。
当我执行“git pull origin remote-branch:local-tracked-branch”时出现此错误
[test2]$ git pull test2 test2:test2 来自 /gitvobs/git_bare/test2 ![拒绝] test2 -> test2(非快进)
而当我签出我的本地跟踪分支 test2 并执行 pull 'git pull origin local-tracked-branch' 时,我没有收到错误消息,我使用 'git pull test2 test2' 进行了 pull
从 /gitvobs/git_bare/test2 * 分支 test2 -> FETCH_HEAD 自动合并 a.txt 自动合并失败;修复冲突,然后提交结果。
我知道添加一个 + (git pull test2 +test2:test2) 会有所帮助,但它会覆盖本地更改。
那么我如何知道我的哪些本地分支是由我在本地使用“git branch new-branch-name”创建的,或者是使用 git branch -b branch-name origin/branch-name 从远程分支本地跟踪的?
git - GIT有邪恶的孪生问题吗?
在 ClearCase 中,当在两个不同版本的目录中找到具有相同名称的两个文件时,如果元素 OID 不同但名称相同,则会发生邪恶孪生。
在 GIT 中,SHA1 id 总是唯一的,同名的文件总是有不同的 SHA1 id。
我们没有邪恶双胞胎的概念,但在某些情况下,可能会有 2 个或更多开发人员在同一目录中创建具有不同内容但文件名相同的文件。在合并期间,当两个文件完全不同时,开发人员有可能单独保留他的更改而留下其他更改,从而导致代码丢失。
任何人都可以让我知道 GIT 中是否会出现类似于 ClearCase 的问题,或者每个 SHA1 id 都是唯一的,GIT 中不会出现任何 Evil twin 问题。
git - 在 git 中的远程存储库上创建一个新分支
正如标题所说,我正在尝试在远程存储库的 git 中创建一个新分支。
为此,我以前一直在使用以下命令。
通常可以正常工作,然后我可以运行
确认。
但是今天早上这不起作用,我收到了以下错误消息。
我已经用谷歌搜索了这条消息并检查了各个站点,人们提出的唯一解释(我发现)可能是主分支需要先推送,或者有些事情你需要先提交,我试过主机不同的东西,但每次错误信息都是一样的。
我可以很好地提交到主分支。
任何帮助将不胜感激。
git - 当我所做的只是压缩提交时,为什么 git-rebase 会给我合并冲突?
我们有一个包含 400 多个提交的 Git 存储库,其中前几十个是大量的反复试验。我们希望通过将许多提交压缩成一个提交来清理这些提交。自然, git-rebase 似乎是要走的路。我的问题是它最终会出现合并冲突,而这些冲突并不容易解决。我不明白为什么会有任何冲突,因为我只是在压缩提交(而不是删除或重新排列)。很可能,这表明我并不完全理解 git-rebase 是如何进行压缩的。
这是我正在使用的脚本的修改版本:
repo_squash.sh(这是实际运行的脚本):
repo_squash_helper.sh(此脚本仅供 repo_squash.sh 使用):
repo_squash_list.txt:(此文件仅供 repo_squash_helper.sh 使用)
我将把“新消息”的内容留给你想象。最初,我在没有“--strategy theirs”选项的情况下执行此操作(即,使用默认策略,如果我正确理解文档是递归的,但我不确定使用哪种递归策略),它也没有不工作。另外,我应该指出,使用 repo_squash_helper.sh 中注释掉的代码,我保存了 sed 脚本工作的原始文件并针对它运行 sed 脚本以确保它正在做我想要它做的事情(它是)。同样,我什至不知道为什么会发生冲突,所以使用哪种策略似乎并不重要。任何建议或见解都会有所帮助,但大多数情况下我只是想让这个挤压工作。
更新了与 Jefromi 讨论的额外信息:
在处理我们庞大的“真实”存储库之前,我在测试存储库上使用了类似的脚本。这是一个非常简单的存储库,并且测试运行良好。
失败时我收到的消息是:
这是第一次壁球提交后的第一个选择。运行会git status
产生一个干净的工作目录。如果我然后执行 a git rebase --continue
,我会在多次提交后收到非常相似的消息。如果我再做一次,我会在几十次提交后得到另一个非常相似的消息。如果我再做一次,这次它会经历大约一百次提交,并产生以下消息:
如果我然后运行git status
,我得到:
“两个修改”位对我来说听起来很奇怪,因为这只是一个选择的结果。还值得注意的是,如果我查看“冲突”,它可以归结为一行,其中一个版本以 [tab] 字符开头,另一个版本以四个空格开头。这听起来可能是我如何设置配置文件的问题,但其中没有任何问题。(我确实注意到 core.ignorecase 设置为 true,但显然 git-clone 是自动完成的。考虑到原始源位于 Windows 机器上,我对此并不完全感到惊讶。)
如果我手动修复file_X.cpp,它会在不久之后因另一个冲突而失败,这次是在一个版本认为应该存在的文件(CMakeLists.txt)和一个版本认为不应该存在的文件(CMakeLists.txt)之间。如果我通过说我确实想要这个文件(我确实想要)来解决这个冲突,那么稍后我会遇到另一个冲突(在同一个文件中),现在有一些相当重要的更改。它仍然只完成了大约 25% 的冲突。
我还应该指出,因为这可能非常重要,所以这个项目是从一个 svn 存储库开始的。最初的历史很可能是从那个 svn 存储库中导入的。
更新#2:
在百灵鸟(受 Jefromi 评论的影响)上,我决定将我的 repo_squash.sh 更改为:
然后,我按原样接受了原始条目。即,“变基”不应该改变任何事情。它最终得到了与前面描述的相同的结果。
更新#3:
或者,如果我省略该策略并将最后一个命令替换为:
我不再遇到“无事可做”的变基问题,但我仍然面临其他冲突。
使用重新创建问题的玩具存储库进行更新:
test_squash.sh(这是您实际运行的文件):
test_squash_helper.sh(由 test_sqash.sh 使用):
PS:是的,当你看到我使用 emacs 作为后备编辑器时,我知道你们中的一些人会畏缩。
PPS:我们确实知道在 rebase 之后我们将不得不删除现有存储库的所有克隆。(按照“发布后您不应重新设置存储库”的思路。)
PPPS:谁能告诉我如何为此添加赏金?无论我处于编辑模式还是查看模式,我都没有在此屏幕上的任何地方看到该选项。
git - 清理旧的远程 git 分支
我在两台不同的计算机(A 和 B)上工作,并将一个通用的 git 远程存储在 Dropbox 目录中。
假设我有两个分支,master 和 devel。两者都在跟踪他们的远程对应对象 origin/master 和 origin/devel。
现在,在计算机 A 上,我删除了本地和远程分支 devel。
在计算机 A 上运行git branch -a
,我得到以下分支列表。
- 掌握
- 原点/HEAD
- 原产地/主人
在计算机 B 上运行git fetch
,我可以使用 删除本地 devel 分支git branch -d devel
,但无法删除远程 devel 分支。
git push origin :heads/devel
返回以下错误消息。
错误:无法推送到不合格的目标:heads/proxy3d
目标 refspec 既不匹配远程上的现有 ref,也不以 refs/ 开头,我们无法根据源 ref 猜测前缀。
致命:远端意外挂断
git branch -a
仍然在远程分支中列出 origin/devel。
如何清理计算机 B 的远程分支?
svn - git-svn 分支:如何配置 git config
几个月前,我配置了一个带有 svn 存储库的 git。到目前为止,我只使用 svn 存储库来保持其上提供的应用程序的最新状态。但现在我也想提交一些东西。为此,我要提交的每个功能都需要位于单独的分支中。我读到了你应该如何创建一个新的分支等。但我认为我错误地配置了我的 git,我没有任何分支信息等我认为我只有主干信息。这就是在我的 git config 中设置我的 svn 存储库的方式:
现在你可以看到我的 svn-remote 网址直接进入主干。我读到了关于添加这个:
但是当我创建一个新分支时,它将把它添加到主干/分支/。当我不添加该行时,它不知道分支的目的地是什么。
知道如何在不破坏现有分支、代码等的情况下解决这个问题吗?
问候,大安
git - Git 处理大量不应检入 svn 的文件
我在 svn 后面使用 git,对于我拥有的每个分支,我都需要进行完整的构建(这需要几分钟)。不应签入这些构建文件,但它们与用户修改的文件混合在一起,这意味着我不能只排除该目录。用户修改的文件也可能会改变,这意味着我不能只为这些文件制定特殊规则。
有没有办法在每个分支的 git 中维护一组未签入的文件?我有哪些选择?