假设我有一个功能分支,在推送我的更改之前我将上游更改合并到其中:
git branch feature1
... [edit my code]
... [commit]
git fetch origin master
git merge fetch_head [or rebase]
... [resolve conflicts]
... [build and test code]
Run Code Online (Sandbox Code Playgroud)
在这一点上,我希望推动我的改变.这样做的正常方法是:
git checkout master [changes a bunch of working tree files]
git merge feature1 [changes the same files right back]
Run Code Online (Sandbox Code Playgroud)
这工作正常,但会使(日期检查)编译器认为一大堆文件是脏的,即使内容相同也需要重建.在这种情况下,有没有办法结帐并使工作树保持不变?
就像是:
git checkout master --merge-branch feature1
Run Code Online (Sandbox Code Playgroud)
编辑:
我只谈论快速合并,根据定义,它不会改变文件的状态.
我想知道是否有办法将一个提交复制到另一个分支而不检查该分支.
例如,我有两个分支:master和parallel_version.
我在parallel_version分支机构,我在这些分支机构的常见文件中发现了一个错误.
我已修好并承诺.如果我使用git-svn,如何将此提交复制到另一个分支?
通常我会这样做:
$ git checkout master
$ git cherry-pick parallel_version
$ git checkout parallel_version
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
我有以下场景:
* ab82147 (HEAD, topic) changes
* 8993636 changes
* 82f4426 changes
* 18be5a3 (master) first
Run Code Online (Sandbox Code Playgroud)
我想(非快进)合并topic成master.这需要我:
git checkout master git merge --no-ff topic但是检查master,然后将主题合并到它会导致git更改我的工作目录(虽然最终结果与检查master之前的结果相同),而我遇到的问题是由于我们项目的大小,构建它需要大约30分钟(使用IncrediBuild)虽然没有真正改变,但它简直无法忍受.
所以我想得到的是以下内容:
* 9075cf4 (HEAD, master) Merge branch 'topic'
|\
| * ab82147 (topic) changes
| * 8993636 changes
| * 82f4426 changes
|/
* 18be5a3 first
Run Code Online (Sandbox Code Playgroud)
没有真正触及工作目录(或至少以某种方式欺骗git).
我很惊讶我找不到任何相关信息...
简而言之,我的问题是是否有办法避免以下两个命令之间的中间文件更改,如果在以下两个命令之后文件内容与之前完全相同?
git checkout dev
git pull
Run Code Online (Sandbox Code Playgroud)
动机是(仅满足其中一个动机的解决方案也比没有好):
当我使用远程源代码控制服务器将 origin/feature 合并到 origin/dev 后从功能分支返回到 master 时,这是一种非常常见的情况。
我希望git fetch origin dev之前的表演能够解决这个问题,但事实并非如此。我还发现了一些像这样的答案,其中讨论了将命令分组在一起以方便起见,但没有针对文件更改问题。
在处理功能分支时,我使用此Git命令将我的"develop"分支更新为最新状态,在将我的功能分支与"develop"合并之前:
git fetch origin develop:develop
Run Code Online (Sandbox Code Playgroud)
这是有效的,即本地"开发"指向与"原点/开发"相同的提交,并且处于最新的起源状态.
不知何故,当检查"develop"分支时,此命令失败:
fatal: Refusing to fetch into current branch refs/heads/develop of non-bare repository
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
如果我知道为什么会发生这种情况,那将有助于我更好地理解Git.
如果我正在分支机构然后意识到我需要将另一个分支合并到我的这里是我当前的工作流程(对于这个例子,我想说我正在我的分支机构工作并希望在master中合并):
git stash
git checkout master
git pull
git checkout my-branch
git merge master
git stash pop
Run Code Online (Sandbox Code Playgroud)
有没有办法让git拉出当前签出的分支以外的分支,还是有更好的方法来做到这一点?
例如,这是我想要做的事情(再次让我说我在我的分支上并希望合并master):
git pull master
git merge master
Run Code Online (Sandbox Code Playgroud)
git-pull手册页说git pull只是一个get get fetch后跟git merge,所以有没有办法在一个分支上进行git pull的合并部分而不是当前检出的分支?
或者我要求的是不可能的?
我们有一个开发分支,它是我们的主人和一个单独的维护分支.当我修复bug时,我经常需要从主服务器到维护服务器进行提交,反之亦然.通常我通过执行以下程序来实现这一目标......
我遇到的问题是因为分支已经变得非常不同我每次切换时都需要重建整个项目,这需要花费10分钟.这是预期的,但我不想这样做,因为我经常在分支机构之间切换.所以为了避免这种情况,我创建了第二个工作目录,以便为每个分支创建一个目录.这个问题是我无法将原始的主提交选择到维护目录中,直到我将该提交从远程提取到维护目录的主分支.当我这样做时,我必须完全重建.
有没有办法将提交拉入我的维护目录的主分支而不切换?或者,有更好的方法完全这样做吗?我们最近从CVS切换到Git,所以我对它并不熟悉.
master当我不在时,我一直在使用以下命令来更新本地master:
git fetch origin master:master
Run Code Online (Sandbox Code Playgroud)
然而,今天,它停止了我正在开发的一个存储库克隆的工作。它失败并出现错误:
fatal: refusing to fetch into branch 'refs/heads/master' checked out at '/path/to/project/directory'
Run Code Online (Sandbox Code Playgroud)
在同一存储库的另一个克隆上,它工作正常。知道可能是什么原因吗?请注意,调用该命令时我不在分支上。master
我使用的是 macOS Monterey 12.6 (21G115),使用 Homebrew 的 Git 2.38.0。
更多信息(匿名):
$ git worktree list
/path/to/project/directory aa00aa0a0a0 [my-current-branch]
Run Code Online (Sandbox Code Playgroud)
$ git branch -vv
main bb11bb1b1b1 Title of the commit on main
master cc22cc2c2c2 [origin/master] Title of the commit on master
* my-current-branch aa00aa0a0a0 [origin/my-current-branch] Title of the commit on my-current-branch
Run Code Online (Sandbox Code Playgroud)
列表上还有更多分支,但应该不相关。您可以看到master&my-current-branch是最新的,但main …
从Merge、update 和 pull Git 分支上接受的答案中而不使用 checkouts,
如果分支 B 会导致非快进合并,则不能在不先检查 A 的情况下将分支 B 合并到分支 A 中。这是因为需要一个工作副本来解决任何潜在的冲突。
我推断并说您也git cherry-pick不能到达未结账的目的地是否正确?
我正在分支"branch-A",并使用命令git branch我可以看到它是本地唯一的分支.
如果我使用git branch -a我可以看到"遥控器/原点/分支-B"的远程副本
我想做的是在本地带上分支-B,但我不想实际检查出来......我的意思是我可以做到这一点,然后检查我的另一个分支回去,但是因为我现在它稍微有些痛苦这样做很多回购.
我在考虑某种取件?但我无法弄清楚如何表达命令.可能吗?
所以我有:
user@pc> git branch
* branch-A
master
Run Code Online (Sandbox Code Playgroud)
和
user@pc> git branch -a
* branch-A
remotes/origin/branch-B
remotes/origin/branch-A
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
我希望能得到:
user@pc> git branch
* branch-A
branch-B
master
Run Code Online (Sandbox Code Playgroud)