相关疑难解决方法(0)

如何退出Vim编辑器?

我被困住了,无法逃脱.它说:

"type :quit<Enter> to quit VIM"
Run Code Online (Sandbox Code Playgroud)

但是当我输入它时它只是出现在物体中.

vi vim

3558
推荐指数
12
解决办法
201万
查看次数

如何让Git使用我选择的编辑器进行提交?

我更愿意在Vim中编写提交消息,但它在Emacs中打开它们.

如何配置Git以始终使用Vim?请注意,我想在全球范围内执行此操作,而不仅仅是针对单个项目.

git vim emacs commit-message editor

2362
推荐指数
17
解决办法
86万
查看次数

如何修改指定的提交?

我通常会提交一份提交列表以供审核.如果我有以下提交:

  1. HEAD
  2. Commit3
  3. Commit2
  4. Commit1

...我知道我可以修改头部提交git commit --amend.但是我怎么能修改Commit1,因为它不是HEAD提交?

git git-rewrite-history

2077
推荐指数
15
解决办法
69万
查看次数

功能分支rebase后Git推送被拒绝

好吧,我认为这是一个简单的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

848
推荐指数
10
解决办法
19万
查看次数

重新定位以及通过rebasing推动提交意味着什么

人们常说,你不应该重新提出你已经推过的提交.这可能意味着什么?

git rebase

105
推荐指数
4
解决办法
7万
查看次数

git push --force-with-lease vs. --force

我试图了解它们之间的区别

git push -f
Run Code Online (Sandbox Code Playgroud)

和

git push --force-with-lease
Run Code Online (Sandbox Code Playgroud)

我的猜测是,如果遥控器没有本地分支没有的提交,后者只会推送到遥控器?

如果有更好的方式来表达问题,lmk,但希望它很清楚.

git git-push

87
推荐指数
4
解决办法
2万
查看次数

修剪Git提交/压缩Git历史

我每隔几分钟就会将我的代码检查到一个Git分支中,并且评论最终会变成"Everything broken again again"和其他荒谬.

然后,每隔几分钟/小时/天,我会做一个真正的评论,比如"修正了第22,55号错误".我如何区分这两个概念?我希望能够删除所有我的频繁提交,然后离开严肃的提交.

git branch

66
推荐指数
3
解决办法
1万
查看次数

如何以非交互方式运行git rebase --interactive?

可以做以下吗?

  1. 将git rebase --interactive标准样板输出到文件,而不是输出到文件并在编辑器中打开它.
  2. 让用户编辑文件.
  3. 让用户git rebase使用已编辑文件的名称重新运行.
  4. 继续通常的rebase过程.

用例:当然是脚本式的变基.例如,请参阅如何以非交互方式在Git中重新提交提交.

git scripting git-rebase non-interactive

41
推荐指数
6
解决办法
9717
查看次数

重写GIT历史的实际后果是什么?

我们的项目已经使用git一个星期左右了,而且我们都非常享受它(在紧密的协作组中,它变成了一个完全不同的git体验).为了使事情尽可能简单,我们不会进行任何变基或历史修改.但我们确实在第一周犯了一些错误.做了一些不应该做的提交,我们设法将一个功能分支合并到错误的集成分支(1.1而不是1.0).在他们长期进入我们的历史之前,我们没有发现这些事情.

现在我看到很多关于重写历史的警告,但我不确定我是否理解所涉及的危险.我们使用共享的裸存储库,并将所有分支推送到那里进行备份.

我希望如果你重写历史记录(比如删除一个提交),后续提交的完整列表将"丢失"该提交(并且可能不会编译/工作).我也希望如果发生这种情况,我实际上可以选择在历史的顶部解决这个问题(并将这部分历史留作非编译).

  • 如果我重写历史(并且所有编译/工作在所有受影响的分支中),我的同事是否需要执行任何特殊命令)?(换句话说,如果我做得好,他们会"知道我已经做过了吗?"
  • 任何具有我不知道的本地更改的用户是否有资格在git pull上合并失败?
  • 我错过了这里必不可少的东西吗

任何关于这个主题的文章/教程的参考也会非常好.

git git-rebase

24
推荐指数
2
解决办法
6006
查看次数

失去了我在GIT的承诺.你能不小心删除提交?

我正在使用git gui,我看不到我的分支.

我知道我今天检查了一些东西.

在我完成提交后,我更改为较早的分支,并使用分支查看器对其进行了验证.我对早期的分支进行了更改,然后想回到我当前的分支,但我再也看不到了.任何帮助都会很棒.

git commit

8
推荐指数
1
解决办法
3973
查看次数

如何使用git rebase来清理复杂的历史记录

在我的笔记本电脑和工作以及家里的桌面上工作了几个星期与六个不同的分支和合并之后,我的历史变得有点复杂.例如,我只是进行了一次获取,然后将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上的相应版本,该版本已经过测试并且可以工作!

我以为我在某个地方看到了这个解决方案,但再也找不到了.有谁知道如何做到这一点?或者,当我开始删除已经合并的不需要的分支时,这些错综复杂的引用名称是否会消失?

我是这个项目的唯一开发者,所以没有其他人会受到影响.

git merge rebase

8
推荐指数
2
解决办法
2万
查看次数

Git - 如何使用当前索引(当前状态)中的一些非暂存更改来编辑旧(不是之前的)提交?

我已经看过这些先前的问题了:

但它们并没有完全解决特定问题 - 索引中还有其他变化!运行rebase命令时,git抱怨:Cannot rebase: You have unstaged changes.

场景:

最后一个之前的提交(我将其称为"2 HEADs前"吗?)是一个重构提交.我目前在索引中有许多非分段更改,但我只想将其中一些添加到上一次提交的上一次.

我想象这样做的方法是:

  1. stash 我目前的所有变化
  2. rebase -i 到最后一次提交(更改索引并移动Head,对吧?)
  3. 将存储加载到我的索引而不更改Head(如何?)
  4. 使用add -p并commit --amend有选择地修改此旧提交
  5. rebase --continue 完成(更新孩子,移动回到我开始的地方,索引会发生什么?)
  6. 然后弹出/清除存储(索引回到我开始的地方).

它是否正确?如果是,我该如何做第3步?如果不是,我应该做什么呢?

另外,请注意我还在学习git,我仍然不能100%确定我正确地引用了git(Head,index,stash等)中的东西.


解:

对于其他任何人都可以提供帮助,这些是我实际采取的步骤:

  1. git stash 我目前的所有变化
  2. git rebase -i <ID>到前一次提交的父级,更改索引并移动Head
  3. git stash apply 将存储加载到我的索引中而不更改Head
    • 如果您有冲突,git reset HEAD <file>请卸载文件暂存.确保分期清晰.
  4. 使用add -p并commit --amend有选择地进行更改并提交它们
  5. git reset --hard 丢弃索引,使其与Head匹配
  6. git rebase --continue完成.更新孩子,移动头回到最开始,但有变化
    • 历史现在分为两个版本.另一个分支在WIP之前结束
  7. 然后弹出存储将索引带回我开始的地方.另一个分支也被清除.

git

6
推荐指数
2
解决办法
2789
查看次数