我正在尝试git push origin master
并收到错误! [rejected] master -> master (non-fast-forward)
。我明白错误的含义。(1)
但是,无论如何我都想决定是否要--force
更新。为此,我需要查看并比较本地分支和目标远程分支的提交。我如何才能并排查看它们?我更喜欢使用 GUI 工具,例如gitg
,但可读的命令行选项就足够了。
(1)这意味着我的本地分支不是目标远程分支的直接后代。这在以下位置有解释:
- 关于快进的说明(Git 文档)
- GitHub 帮助
- Git push 不能快速合并是什么意思?(堆栈溢出)
- ...还有更多
答案1
您可以使用以下工具来可视化和比较存储库:
git log——图表
您可以使用 git 命令行:
git log --graph --oneline --all --decorate
来自手册页:“在输出的左侧绘制基于文本的提交历史图形表示。这可能会导致在提交之间打印额外的行,以便正确绘制图形历史记录。”
看查看提交历史记录作为示例(您必须向下滚动相当多)。
吉特克
您可以使用 gitk GUI:
git fetch origin # make sure you are up-to-date
gitk branchname origin/branchname # launch gitk
使用此命令,您可以看到本地和远程分支是如何分歧的。
其他工具
其他 GUI 工具可能具有类似的可视化选项。请参阅rob mayoff 对“Git push 不能快速合并是什么意思?”的回答请参阅您可能会看到的示例。
非快进
调查过程中提到了所有这些工具为什么 git pull 说是最新的,但 git push 拒绝非快进在 StackOverflow 上。答案包括如何在不强制的情况下解决非快进问题的技巧。(一个常见的原因是本地分支与远程分支同名 - 例如,同时命名本地和远程分支,origin/new-feature
而不是仅将本地分支命名为new-feature
。)