我被困住了,无法逃脱.它说:
"type :quit<Enter> to quit VIM"
Run Code Online (Sandbox Code Playgroud)
但是当我输入它时它只是出现在物体中.
我更愿意在Vim中编写提交消息,但它在Emacs中打开它们.
如何配置Git以始终使用Vim?请注意,我想在全球范围内执行此操作,而不仅仅是针对单个项目.
我通常会提交一份提交列表以供审核.如果我有以下提交:
HEADCommit3 Commit2 Commit1...我知道我可以修改头部提交git commit --amend.但是我怎么能修改Commit1,因为它不是HEAD提交?
好吧,我认为这是一个简单的git场景,我错过了什么?
我有一个master分支和一个feature分支.我做了一些工作master,一些工作,feature然后再做一些工作master.我最终得到这样的东西(词典顺序暗示了提交的顺序):
A--B--C------F--G (master)
\
D--E (feature)
Run Code Online (Sandbox Code Playgroud)
我没有问题要git push origin master保持远程master更新,也没有git push origin feature(当打开时feature)为我的feature工作维护远程备份.到目前为止,我们很好.
但现在我想在主人feature的F--G提交之上重新定义,所以我git checkout feature和git rebase master.还好.现在我们有:
A--B--C------F--G (master)
\
D'--E' (feature)
Run Code Online (Sandbox Code Playgroud)
问题:当我想要备份新的rebased feature分支时git push origin feature,推送被拒绝,因为树由于变基而发生了变化.这只能通过解决git push --force origin feature.
我讨厌使用--force而不确定我是否需要它.那么,我需要它吗?重新定位是否必然意味着下一个push应该是--force完美的?
这个功能分支不与任何其他开发者共享,所以我事实上 …
我试图了解它们之间的区别
git push -f
Run Code Online (Sandbox Code Playgroud)
和
git push --force-with-lease
Run Code Online (Sandbox Code Playgroud)
我的猜测是,如果遥控器没有本地分支没有的提交,后者只会推送到遥控器?
如果有更好的方式来表达问题,lmk,但希望它很清楚.
我每隔几分钟就会将我的代码检查到一个Git分支中,并且评论最终会变成"Everything broken again again"和其他荒谬.
然后,每隔几分钟/小时/天,我会做一个真正的评论,比如"修正了第22,55号错误".我如何区分这两个概念?我希望能够删除所有我的频繁提交,然后离开严肃的提交.
可以做以下吗?
git rebase --interactive标准样板输出到文件,而不是输出到文件并在编辑器中打开它.git rebase使用已编辑文件的名称重新运行.用例:当然是脚本式的变基.例如,请参阅如何以非交互方式在Git中重新提交提交.
我们的项目已经使用git一个星期左右了,而且我们都非常享受它(在紧密的协作组中,它变成了一个完全不同的git体验).为了使事情尽可能简单,我们不会进行任何变基或历史修改.但我们确实在第一周犯了一些错误.做了一些不应该做的提交,我们设法将一个功能分支合并到错误的集成分支(1.1而不是1.0).在他们长期进入我们的历史之前,我们没有发现这些事情.
现在我看到很多关于重写历史的警告,但我不确定我是否理解所涉及的危险.我们使用共享的裸存储库,并将所有分支推送到那里进行备份.
我希望如果你重写历史记录(比如删除一个提交),后续提交的完整列表将"丢失"该提交(并且可能不会编译/工作).我也希望如果发生这种情况,我实际上可以选择在历史的顶部解决这个问题(并将这部分历史留作非编译).
任何关于这个主题的文章/教程的参考也会非常好.
我正在使用git gui,我看不到我的分支.
我知道我今天检查了一些东西.
在我完成提交后,我更改为较早的分支,并使用分支查看器对其进行了验证.我对早期的分支进行了更改,然后想回到我当前的分支,但我再也看不到了.任何帮助都会很棒.
在我的笔记本电脑和工作以及家里的桌面上工作了几个星期与六个不同的分支和合并之后,我的历史变得有点复杂.例如,我只是进行了一次获取,然后将origin与origin/master合并.现在,当我做git show-branches时,输出如下所示:
! [login] Changed domain name. ! [master] Merge remote branch 'origin/master' ! [migrate-1.9] Migrating to 1.9.1 on Heroku ! [rebase-master] Merge remote branch 'origin/master' ---- - - [master] Merge remote branch 'origin/master' + + [master^2] A bit of re-arranging and cleanup. - - [master^2^] Merge branch 'rpx-login' + + [master^2^^2] Commented out some debug logging. + + [master^2^^2^] Monkey-patched Rack::Request#ip + + [master^2^^2~2] dump each request to log ....
我想用git rebase清理它.为此目的,我创建了一个新的分支,rebase-master,并在这个分支上尝试了git rebase <common-ancestor>.但是,我必须解决许多冲突,并且分支rebase-master上的最终结果不再匹配master上的相应版本,该版本已经过测试并且可以工作!
我以为我在某个地方看到了这个解决方案,但再也找不到了.有谁知道如何做到这一点?或者,当我开始删除已经合并的不需要的分支时,这些错综复杂的引用名称是否会消失?
我是这个项目的唯一开发者,所以没有其他人会受到影响.
我已经看过这些先前的问题了:
但它们并没有完全解决特定问题 - 索引中还有其他变化!运行rebase命令时,git抱怨:Cannot rebase: You have unstaged changes.
最后一个之前的提交(我将其称为"2 HEADs前"吗?)是一个重构提交.我目前在索引中有许多非分段更改,但我只想将其中一些添加到上一次提交的上一次.
我想象这样做的方法是:
stash 我目前的所有变化 rebase -i 到最后一次提交(更改索引并移动Head,对吧?) add -p并commit --amend有选择地修改此旧提交 rebase --continue 完成(更新孩子,移动回到我开始的地方,索引会发生什么?) 它是否正确?如果是,我该如何做第3步?如果不是,我应该做什么呢?
另外,请注意我还在学习git,我仍然不能100%确定我正确地引用了git(Head,index,stash等)中的东西.
对于其他任何人都可以提供帮助,这些是我实际采取的步骤:
git stash 我目前的所有变化 git rebase -i <ID>到前一次提交的父级,更改索引并移动Head git stash apply 将存储加载到我的索引中而不更改Head
git reset HEAD <file>请卸载文件暂存.确保分期清晰.add -p并commit --amend有选择地进行更改并提交它们 git reset --hard 丢弃索引,使其与Head匹配git rebase --continue完成.更新孩子,移动头回到最开始,但有变化