以下命令之间有什么区别?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
Run Code Online (Sandbox Code Playgroud)
diff手册谈到它:
比较分支机构
Run Code Online (Sandbox Code Playgroud)$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- 主题提示与主分支之间的更改.
- 与上述相同.
- 自主题分支启动以来主分支上发生的更改.
但对我来说并不完全清楚.
假设我只是衍合分支foo上master,有冲突的.我想foo通过引入额外的更改或丢失更改(除了适合冲突解决的更改),确保我不会在冲突解决期间意外损坏内容.我这样做是通过:
diff -u <(git diff `git merge-base master foo@{1}` foo@{1}) \
<(git diff `git merge-base master foo ` foo )
Run Code Online (Sandbox Code Playgroud)
(更新:或我刚刚提醒的等效...语法git-diff:)
diff -u <(git diff master...foo@{1}) <(git diff master...foo) | mate
Run Code Online (Sandbox Code Playgroud)
这向我展示了master..foo被认为是补丁的所有变化,这正是我想要检查的最小化.但是,调用很复杂,输出的解释并不完全简单.
有没有更好的方法来完成这项任务 - 提供相同的信息,但有更好的方法或格式 - 或者我应该采取上述内容并将其包装在脚本中?
在我们的项目(在GitHub上托管)中,有人不小心每次都强行推动主人.没有人知道是否这样做,我想知道是谁做的,以及它背后有什么样的错误配置工具或坏习惯.
所以问题是,如何识别推动力量的用户?我拉的时候看到这样的东西:
# git pull --prune
(.....)
+ 4c0d44c...138b9ed master -> origin/master (forced update)
Run Code Online (Sandbox Code Playgroud)
但138b9ed它只是源头/主人的最新提交,并且任何人都可能在强制推动后做出承诺; 甚至可能是推力器本人没有做出任何改变,只是重新定位,所以他的名字甚至不存在于作为作者的原始/主人历史的重写部分.
我也尝试了git reflog origin/master,但它只是提供了相同的信息:有一条记录说明git pull --prune (forced update)了提交ID 138b9ed,但是这将再次将最后一个提交者提供给master,而不是那个强制推送的提交者.git reflog master在原始服务器上运行可能会有所帮助,但GitHub并没有为您提供那种访问AFAIK.
有没有可靠的方法来找出推动起源的人(何时)?
几天后,我正在为Scrollback项目重新编写install.sh文件,因为我是唯一一个在本地工作并且在本地执行的人,所以我一直在提交修改相同的提交,偶尔推送到我的fork的主人.(请忽略这里的最佳做法,我一个人工作).
在此期间,我记得通过电子邮件向某人展示我完成的工作,网址为https://github.com/sindhus/scrollback/blob/8d8f7f414383499c2ab6fec586b4c9665a41c7aa/install.sh
现在由于一些困惑我在本地失去了我的工作(想想rm -rf),我记得在此之前推进.所以github在某些时候确实看到了我重新定义的install.sh提交ID.
如您所见,上面的URL允许我通过提交ID访问此blob.但是我无法在本地访问它,因为强制推送同一个repo.
我的问题如何让github向我显示文件的所有提交ID?无论路径如何,它可能知道该文件的所有ID.如果我必须使用他们的API,我不介意,但我想要深入研究一些想法.
谢谢!