我将一个大项目的上游与我当地的git repo合并.在合并之前,我有一些易于阅读的历史,但在合并之后,我的回购中有大量的历史记录.我不需要上游回购的所有历史提交.
在我想保留的上游合并之后还有其他提交.如何在保持上游合并之后的提交的同时,将从上游合并的所有历史记录压缩到一个提交中?
我有大量的提交,大约20个,自从我上次推出origin/master以来我已经完成了.我从来没有过多个分支,主,所有提交都是在master上完成的.如何将所有20个提交压缩到一个提交中,最好使用sourcetree?我想这样做,所以我可以将一个提交推送到origin/master.
在sourcetree中,我已经想到在存储库菜单中使用交互式rebase命令.它会显示我想要压缩的确切提交列表.我尝试反复按下壁球按钮,直到它显示一个包含所有这些按钮的提交.但是当我点击OK时,我最终只得到两个最近提交的提交.因此,即使对话框似乎表明它可以在实践中压缩多个,但我无法让它工作.
我有以下git工作流程:
master分支但是,有时候,我需要从master中恢复整个功能.这可能涉及很多revert.(需要恢复功能的原因是我有一个网站可以使用一个仓库.从那里,我们使用一个脚本将网站部署到我们的生产站点或临时站点.两者都是从我们的主分支完成的.Don不要问,这就是我给予的工作.有时候,我正在研究我上演的东西,但是需要立即做出改变,所以我需要一些方法来拉动我的变化以便清理回购.)
我认为最简单的方法是每个功能分支只有一个提交.然后我可以revert提交.很自然地,我想在将一个功能分支的所有提交压缩成一个之前将其压缩为一个master.
所以现在我的工作流程看起来像:
这个逻辑有什么问题吗?它违背了任何最佳做法吗?我自己做了一些测试,整个工作流程似乎运行顺利并解决了我的问题,但我想让其他(更聪明的)Git-ers运行这个想法,看看它是否有任何问题.
谢谢!
我的工作流程:
对于CODE REVIEW,我需要显示两个头之间的差异并压缩/组织我的提交(大约5次提交).这项任务的最佳GUI(跨平台?)是什么?
我有一个大约20个提交的分支.
分支上的第一个SHA是分支上bc3c488...
的最后一个SHA2c2be6...
如何将所有提交合并在一起?
我想这样做而不使用交互式rebase,因为有很多提交.
我需要这个github Pull Request,我被要求合并我的提交.
需要这样做而不进行git merge --squash因为我需要在本地进行压缩而另一个开发人员进行合并并希望我在合并之前先进行压缩.
让我们说我的本地git log节目:
739b36d3a314483a2d4a14268612cd955c6af9fb a
...
c42fff47a257b72ab3fabaa0bcc2be9cd50d5c89 x
c4149ba120b30955a9285ed721b795cd2b82dd65 y
dce99bcc4b79622d2658208d2371ee490dff7d28 z
Run Code Online (Sandbox Code Playgroud)
我的遥控器git log显示:
c4149ba120b30955a9285ed721b795cd2b82dd65 y
dce99bcc4b79622d2658208d2371ee490dff7d28 z
Run Code Online (Sandbox Code Playgroud)
什么是最简单的方法(假设任意大量的本地提交):
527b5810cfd8f45f18ae807af1fe1e54a0312bce a ... x
c4149ba120b30955a9285ed721b795cd2b82dd65 y
dce99bcc4b79622d2658208d2371ee490dff7d28 z
Run Code Online (Sandbox Code Playgroud) 修改和壁球命令有什么区别?我试过这两个,发现两者都在做同样的管理.
我知道如何删除已合并的所有本地分支.但是,我相信这是由于Github的新拉动请求压缩和合并功能,我发现自己留下了许多未合并的本地分支,但如果合并到master中将导致没有变化.
如何修剪这些本地分支,即那些未必合并但不会影响主分支(或更一般地说,当前分支)的本地分支?
我git subtree用来组织我的git存储库.假设我有一个名为的主存储库repo和一个名为的库lib.
我lib通过压缩它的历史成功地"导入"了存储库.我现在想lib通过压缩历史来回馈.这似乎不起作用:我指定--squash选项,git subtree push但在查看历史记录时,我仍然发送所有提交.
这是一个脚本,显示了重现问题所需的最小命令:
#!/bin/bash
rm -rf lib lib-work repo
# repo is the main repository
git init repo
# lib is the 'subtreed' repository (bare to accept pushes)
git init --bare lib
git clone lib lib-work
cd lib-work
# adding a bunch of commits to lib
echo "v1" > README
git add README
git commit -m 'lib commit 1'
echo "v2" > …Run Code Online (Sandbox Code Playgroud) 如果多个人一起在一个功能分支上工作,当你将其压缩并合并到主分支时会发生什么?git Blame 会跟踪谁参与了该功能的哪一部分吗?或者点击压缩和合并的人会被指责为所有 git 的罪魁祸首吗?即使该功能位于同一个 PR 中,如何显示谁负责该功能的哪一部分?
git ×10
squash ×10
branch ×2
github ×2
merge ×2
git-amend ×1
git-commit ×1
git-merge ×1
git-push ×1
git-rebase ×1
git-squash ×1
git-subtree ×1
push ×1
workflow ×1