是否可以在git分支中打开文件而不检查该分支?怎么样?
基本上我希望能够在我的github pages分支中打开一个文件而不必一直切换分支.我不想修改它,只想查看它.
除了编写别名或脚本之外,是否有更短的命令来获取特定提交的差异?
git diff 15dc8^..15dc8
Run Code Online (Sandbox Code Playgroud)
如果您只提供单个提交ID git diff 15dc8,则会针对HEAD区分该提交.
我希望能够找到任何分支中任何提交中引入的某个字符串,我该怎么做?我找到了一些东西(我为Win32修改过),但git whatchanged似乎没有查看不同的分支(忽略py3k块,它只是一个msys/win换行修复)
git whatchanged -- <file> | \
grep "^commit " | \
python -c "exec(\"import sys,msvcrt,os\nmsvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)\nfor l in sys.stdin: print(l.split()[1])\")" | \
xargs -i% git show origin % -- <file>
Run Code Online (Sandbox Code Playgroud)
如果您的解决方案很慢,这并不重要.
我只是使用重命名我的本地分支
git branch -m oldname newname
Run Code Online (Sandbox Code Playgroud)
但这只会重命名分支的本地版本.如何在github中重命名一个?
我main.cpp在编辑器中打开了文件" ".
我想main.cpp在编辑器中看到之前的修订版" ".
我现在这样做的方式是这样的.
close "main.cpp" in the editor
prompt> mv main.cpp tmp
prompt> git checkout HEAD^ main.cpp
prompt> mv main.cpp old_main.cpp
prompt> mv tmp main.cpp
prompt>
open "main.cpp" and "old_main.cpp" in the editor
Run Code Online (Sandbox Code Playgroud)
可以简化,所以我不必在编辑器中关闭"main.cpp"吗?
我希望的是一个git-checkout可以做到这一点的变体.
更新:我在mac osx 10.5.7上使用git
prompt> git --version
git version 1.6.0.4
prompt>
Run Code Online (Sandbox Code Playgroud)
UPDATE2:JakubNarębski的回答是:
prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp
prompt>
Run Code Online (Sandbox Code Playgroud)
更新3:Karmi的答案,针对特定修订:
prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj
prompt>
Run Code Online (Sandbox Code Playgroud) 例证:
我是一个使用bash v3.2.17的mac,我正在使用通过macports安装的git和bash_completion变体.
当我输入git checkout m<tab>.例如,我把它完成了master.
但是,我有一个别名git checkout,gco.当我输入时gco m<tab>,我没有自动完成分支名称.
理想情况下,我希望自动完成只是神奇地为我的所有别名工作.可能吗?如果做不到这一点,我想为每个别名手动定制它.那么,我该怎么做呢?
有没有办法搜索git存储库,git grep但从搜索中排除某些路径/目录/文件?像--exclude普通grep命令中的选项一样.
如果你很好奇:我不想使用普通的grep,因为它比git grepgit存储库的大小要慢得多.
我可以将参数传递给Git命令的别名吗?
我在Git配置中有一些别名,如下所示:
rb1 = rebase -i HEAD~1
rb2 = rebase -i HEAD~2
rb3 = rebase -i HEAD~3
rb4 = rebase -i HEAD~4
....
Run Code Online (Sandbox Code Playgroud)
是否可以制作rb别名,以便git rb <x>适用于任何<x>?
我试过这个别名:
rb = rebase -i HEAD~
Run Code Online (Sandbox Code Playgroud)
但后来例如git rb 8不起作用.
我一直想要使用git命令来保存存储而不修改我的工作树,作为一个轻量级备份,可以安全地从任何git重置或我可能做的任何事情来搞砸我的索引.基本上功能相当于"git stash save && git stash apply",但工作副本永远不会被触及,因为这可能会使某些文本编辑器/ IDE变得胡思乱想.
像这样的东西接近我想要的东西,但并不完全:
git update-ref refs/stash `git stash create "Stash message"`
Run Code Online (Sandbox Code Playgroud)
这在功能上有效,但我遇到的问题是,即使实际的存储提交确实包含了我的消息,"git存储列表"中也没有显示存储消息.考虑到存储的大小,存储消息非常重要.
我想创建一个Git别名来执行多个命令,但我无法找到有关如何完成此操作的文档.
来自'man git-config'
Run Code Online (Sandbox Code Playgroud)alias.*git(1)命令包装器的命令别名 - 例如在定义"alias.last = cat-file commit HEAD"之后,调用"git last"等同于"git cat-file commit HEAD".为避免使用脚本时出现混淆和麻烦,将忽略隐藏现有Git命令的别名.参数由空格分隔,支持通常的shell引用和转义.引号对和反斜杠可用于引用它们.
如果别名扩展以感叹号为前缀,则将其视为shell命令.例如,定义"alias.new =!gitk --all --not ORIG_HEAD",调用"git new"等同于运行shell命令"gitk --all --not ORIG_HEAD".请注意,shell命令将从存储库的顶级目录执行,该目录可能不一定是当前目录.通过从原始当前目录运行git rev-parse --show-prefix来设置GIT_PREFIX.见git-rev-parse(1).