我在本地存储库上有一堆提交,它们在主题上相似.在推送到遥控器之前,我想将它们组合成一个提交.我该怎么做?我认为rebase
这样做,但我无法理解文档.
我已经在Github上提交了对开源项目的更改,并收到了其中一个核心团队成员的代码审查意见.
我想考虑审核评论更新代码,然后重新提交.这样做的最佳工作流程是什么?根据我对git/github的有限知识,我可以做以下任何一项:
将代码更新为新提交,并将初始和更新的提交添加到我的pull请求中.
不知怎的(??)从我的存储库回滚旧的提交,并创建一个包含所有内容的新提交,然后为此提出拉取请求?
git commit
有一个修改功能,但我听说你在本地存储库之外推送提交后不应该使用它?在这种情况下,我在我的本地PC上进行了更改并推送到我的项目的github分支.这可以使用'修改'吗?
别的什么?
看起来选项2/3会很好,因为开源项目在他们的历史中只有一个提交将实现一切,但我不知道如何做到这一点.
注意:我不知道这是否会影响答案,但我没有在单独的分支中进行更改,我只是在master之上做了一次提交
我有一个分支'firstproject'有2个提交.我想摆脱这些提交并使它们显示为单个提交.
该命令git merge --squash
听起来很有希望,但是当我运行git merge --squash
终端时,只会显示该命令的选项.什么是正确的命令?
Commit 1:
Added 'homepage.html'
Added 'contacts.html'
Commit 2:
Added 'homepage.php'
Added 'homepage.php'
Deleted 'homepage.html'
Deleted 'contacts.html'
Run Code Online (Sandbox Code Playgroud) 我是git的新手(很享受它!).在新分支开发的同时,我不断承诺我的应用程序的各种开发"状态".现在我必须检查它以供审查,但不希望所有内容都进入不同的提交(不同的注释和ID).
我怎样才能推动所有更改,就好像这是第一次?
我正在尝试将我的所有提交从当前分支重新压缩并压缩到主分支.这是我正在尝试做的事情:
git checkout -b new-feature
Run Code Online (Sandbox Code Playgroud)
在我尝试之后做了几次提交:
git rebase -i master
Run Code Online (Sandbox Code Playgroud)
在这种情况下,提交将保留在new-feature
分支中
git checkout master
git rebase -i new-feature
Run Code Online (Sandbox Code Playgroud)
它给我和编辑带有noop消息的窗口.
我知道命令:
git merge --squash new-feature
Run Code Online (Sandbox Code Playgroud)
但我正在努力学习rebase
命令.
当我这样做时,我git rebase --interactive
有六个基本命令:pick
、reword
、edit
、squash
和fixup
。exec
命令有什么作用pick
?是cherry-pick
提交还是确实如此checkout
?
在我的存储库中,我目前有这样的历史:
$ git log --oneline
<commit-id-1> Merge commit '<merged-commit-id-1>' into <branch>
<commit-id-2> Merge commit '<merged-commit-id-2>' into <branch>
...
Run Code Online (Sandbox Code Playgroud)
在哪里<merged-commit-id-1>
和<merged-commit-id-2>
我从branch
之前创建当前的另一个分支合并.现在我想以某种方式加入这些合并提交:
$ git log --oneline
<commit-id> My message about huge successful merge here...
...
Run Code Online (Sandbox Code Playgroud)
我试过了
$ git rebase --preserve-merges -i HEAD~2
Run Code Online (Sandbox Code Playgroud)
有p
和s
但得到这个错误:
Refusing to squash a merge: ...
Run Code Online (Sandbox Code Playgroud)
(我也在一个新的最简单的存储库中复制它)有没有办法绕过它?
我真正想要的是能够通过原始分支(已更改)的ID合并许多提交,同时逐步解决冲突并且不引入数十个合并提交(merge --squash
也不是一个选项,因为我需要保留历史).
例:
$ git init
$ echo 1 > 1; git add 1; git commit -m 1
$ git branch …
Run Code Online (Sandbox Code Playgroud) 我很久以前就提交了一个糟糕的提交,我想将它完全从git历史中删除,好像它从未发生过一样.我知道提交ID让我们说1f020.我已经尝试了git rebase并将其删除,但是在重新定位时存在很多冲突,这是不可能的.该提交是一个简单的1行代码更改,并推送一些与项目无关的文件.所以我想写一行代码更改并提交它,然后替换以某种方式用很久以前的那个替换这个新的提交.
git ×10
branch ×2
git-squash ×2
github ×2
rebase ×2
squash ×2
git-merge ×1
git-svn ×1
merge ×1
pull-request ×1