我有一个特定的提交,我想贡献给我在github上分叉的存储库.我认为这样做的机制是"拉取请求".但是,当我尝试这个时,我只能请求我的整个分支.我不希望提出其他提交请求,因为它们不相关.知道如何做到这一点.
最后一次提交b50b2e7是我希望提取请求的唯一提交.无论如何,我可以做到这一点,或者所有提交都相互依赖?
我在主分支中有33个提交被网格化.现在我需要整齐地保持记录.所以现在我已经创建了功能分支,我试图在不同的功能分支中对这33个提交进行分类.那么可以一次选择多个提交来复制相关的功能分支吗?当我尝试使用cherry-pick命令进行多次提交时,我也面临着冲突.
git cherry-pick A B C
Run Code Online (Sandbox Code Playgroud)
这里A,B,C是提交的哈希码.
我使用我的本地分支feature为github仓库创建一个PR(我没有写入权限).后来我决定将其最后一次提交分成独立的PR,所以我将feature一个提交移回:
git checkout feature
git branch feature2
git reset --hard @~
git push -f
Run Code Online (Sandbox Code Playgroud)
第一个PR合并到上游,所以现在我要创建第二个PR:
git checkout master
git pull upstream master
git push origin
git checkout feature2
git rebase master
Run Code Online (Sandbox Code Playgroud)
不幸的是,事实证明git缺乏feature合并的信息master.因此,它没有意识到最近的共同基础feature2并且master非常接近:它只是feature.相反,它rebase一直回到共同基础,feature并且master好像它们从未合并过一样.结果,git rebase master变得不必要地混乱.
为什么Github失去通过上游PR feature合并的信息master?有没有办法提供Github这些信息?
最后,我不得不诉诸:
git checkout master
git checkout -b feature2_new
git cherry-pick feature2
Run Code Online (Sandbox Code Playgroud)
幸运的是,我只需要处理一次提交.甚至与单个提交,我认为这与真正的基础(如果混帐知道这件事),合并会优于cherry-pick …
我需要从尚未合并到分支的拉取请求中获取更改。
我可以从分支中挑选每个提交,但其中有很多。有没有更快的方法从拉取请求中获取所有更改?
如果它有所不同,我使用 Github。
我想从一个存储库中挑选多个提交到另一个。我按照此 Stack Overflow 帖子中提供的说明进行操作:
/path/to/2 $ git --git-dir=/path/to/1/.git format-patch --stdout sha1^..sha1 | git am -3
Run Code Online (Sandbox Code Playgroud)
并且发生了冲突:
Applying: commit-name-xxx
fatal: sha1 information is lacking or useless (path/to/conflicted/file).
error: could not build fake ancestor
Patch failed at 0001 commit-name-xxx
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, …Run Code Online (Sandbox Code Playgroud) 我们有两个Git存储库.
回购1.提交:A,B,C.此存储库是根据SVN历史记录创建的.
Repo 2.提交:D,E,F.这个存储库是在没有SVN历史的情况下创建的,只是使用工作副本(作为提交C),它成为提交D.换句话说,提交C和D的文件树是相同的.
现在,我们想要合并两个存储库,以便在一个存储库中拥有完整的历史记录.有没有办法将所有提交E..F"复制/改组/其他"复制到C?
我们其中一个人推动了一个似乎完整并在他的计算机上工作的提交.从那时起,其他任何计算机都无法从远程存储库中获取更改.每个人都得到的错误是:
git.exe fetch -v --progress "origin"
POST git-upload-pack (gzip 1407 to 775 bytes)
remote: error: Could not read a75720ce47ae8dcc1d0b4c09fcb7d6f70efa390b
remote: fatal: revision walk setup failed
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header
git did not exit cleanly (exit code 128) (14368 ms @ 26/10/2014 11:49:05)
Run Code Online (Sandbox Code Playgroud)
无法读取的SHA(a75720 ...)是所述提交的SHA.
我们尝试了各种各样的东西,但似乎没有任何效果.运行git fsck不会将提交显示为悬空,并且在远程服务器中,没有分支指向提交.
从提交中恢复数据不是优先事项,但让系统再次运行是.
有关如何删除/修复损坏的提交的任何建议?非常感谢帮助.
谢谢!
我们最近从 SVN 迁移到 GIT,我们的代码托管在 Atlassian Bitbucket 上,并使用 Atlassian SourceTree 作为我们的桌面客户端。现在我们有几个带有代码库分支的项目,即。UAT 的集成分支和 Stage 的发布分支。问题是,在通过 SourceTree 将代码从 UAT 迁移到 Stage 时,我们正在使用cherry pick 进行大量提交,这让我们发疯。我们是否有替代源代码树中这个繁琐过程的替代方法,或者我们是否必须编写脚本。谢谢
我需要为最后N次提交创建一个补丁文件,并将它们作为单独的提交应用到另一个分支.对于N = 3,我假设我必须这样做:
git diff HEAD~3 HEAD~2 >> diff1
git diff HEAD~2 HEAD~1 >> diff2
git diff HEAD~1 HEAD >> diff3
然后分别将它们应用于另一个分支:
git apply diff1
(push)
git apply diff2
(push)
git apply diff3
有没有更短的方法来做到这一点?
我的存储库中有两个分支(出于此问题的目的):master和performance_testing。我已收到该master分支机构的更改。我也需要把它们放进去performance_testing。我需要保持两个分支存在并分开,因此合并是不合适的。我想我可以在一个分支中引入更改并提交,然后在另一分支中执行相同的操作。但这似乎容易出错,我认为git可以通过某种方式更直接地做到这一点。我该怎么做呢?
我职业生涯的大部分时间都在使用 Perforce,并且仍在习惯 git,所以我想我要么没有意识到我的场景与以下帖子中的场景不匹配,要么我错过了一些隐式步骤对于普通 git 用户来说是显而易见的,但对我来说却不是。
\n似乎每当我精挑细选时,我最终都会得到一个没有任何更改的分支(不过这是有道理的,因为它们已经致力于掌握,对吗?\xe2\x80\x94那么我如何创建这个“主题分支”我看到有人提到了?)现在我运行了几个我不完全理解的命令(例如git remote add ...),并且还可能将原作者的存储库与我的分叉存储库互换,所以它变得很难说是否因为我弄乱了我的环境而无法正常工作。
@Omer 的回答效果很好。然后我做了一个
\ngit reset --hard HEAD\nRun Code Online (Sandbox Code Playgroud)\n清理。原作者合并了 PR,我同步到它:
\ngit remote add upstream git://github.com/<author>/<repo>.git\ngit pull upstream master\nRun Code Online (Sandbox Code Playgroud)\n 我在一个拥有分支策略的团队中工作,有时会重写某些分支的上游提交历史记录.
能够将我的历史记录中的最后N次提交移动到存储区,然后重置HEAD,然后将这些存储条件移回我的本地历史记录,同时保留提交消息将非常有用.
如何在本地分支和存储之间移动提交?有没有办法为N次提交自动执行此操作?例如,创建可以调用类似的别名git stashHistory 5; git popHistory 5.假设当前工作目录在执行此操作时没有任何更改.
git ×12
github ×2
merge ×2
branch ×1
cherry-pick ×1
commit ×1
diff ×1
fetch ×1
git-am ×1
git-apply ×1
git-branch ×1
git-diff ×1
git-fork ×1
git-workflow ×1
pull-request ×1
rebase ×1