我来自Subversion背景,当我有一个分支时,我知道我正在处理的是"这些工作文件指向这个分支".
但是对于Git,我不确定我何时在NetBeans或Notepad ++中编辑文件,无论它是与主服务器还是其他分支相关联.
git在bash中没有问题,它告诉我我在做什么.
我在我的存储库中做了一些工作,发现文件有本地更改.我不再想要它们所以我删除了文件,以为我可以签出一份新的副本.我想做Git相当于
svn up .
Run Code Online (Sandbox Code Playgroud)
使用git pull似乎没有用.一些随机搜索引导我到一个有人推荐做的网站
git checkout HEAD^ src/
Run Code Online (Sandbox Code Playgroud)
(src是包含已删除文件的目录).
现在我发现我有一个超然的头.我不知道那是什么.我怎么撤消?
如何查询git以找出哪些分支包含给定的提交?gitk通常会列出分支,除非有太多分支,在这种情况下它只是说"很多(38)"或类似的东西.我需要知道完整列表,或者至少是否某些分支包含提交.
在Unix或GNU脚本环境(例如Linux发行版,Cygwin,OSX)中,确定当前在工作目录中检出哪个Git分支的最佳方法是什么?
这种技术的一个用途是自动标记一个版本(就像svnversionSubversion一样).
另请参阅我的相关问题:如何以编程方式确定Git结帐是否为标签,如果是,那么标签名称是什么?
我创建了新的分支master:
git checkout -b testbranch
我做了20次提交.
现在我要压缩那20个提交.我这样做:
git rebase -i HEAD~20
如果我不知道有多少提交怎么办?有什么方法可以做以下事情:
git rebase -i all on this branch
我目前正忙着有很多分支的项目,我有一个标签,用于最后一次更改,其中一个分支完成.但是我不清楚这个标签在哪个分支上.
如何找出哪个分支标签?
我习惯于运行git比较,这将允许与本地git revs进行比较,如:
git diff HEAD HEAD~110 -- some/file/path/file.ext
Run Code Online (Sandbox Code Playgroud)
是否可以使用日期?如果是这样,怎么样?我希望能够代替上面例子中的"110",日期如"2012年12月4日".
基本上我是在这之后但是对于PowerShell而不是bash.
我通过PowerShell在Windows上使用git.如果可能,我希望我当前的分支名称显示为命令提示符的一部分.
我可以通过执行以下任一操作找到当前的git分支名称:
git branch | awk '/^\*/ { print $2 }'
git describe --contains --all HEAD
Run Code Online (Sandbox Code Playgroud)
但是当处于分离的HEAD状态时,例如在Jenkins maven构建中的后构建阶段(或在Travis git fetch中),这些命令不起作用.
我目前的工作解决方案是:
git show-ref | grep $(git log --pretty=%h -1) | sed 's|.*/\(.*\)|\1|' | sort -u | grep -v HEAD
Run Code Online (Sandbox Code Playgroud)
它显示在其HEAD提示上具有最后一次提交的任何分支名称.这很好,但我觉得有一个强大的git-fu的人可能有一个更漂亮的解决方案?
我非常擅长shell脚本(使用bash),我正在寻找一种方法来检查当前git分支是否为"x",如果不是"x"则中止脚本.
#!/usr/bin/env bash
CURRENT_BRANCH="$(git branch)"
if [[ "$CURRENT_BRANCH" -ne "master" ]]; then
echo "Aborting script because you are not on the master branch."
return; # I need to abort here!
fi
echo "foo"
Run Code Online (Sandbox Code Playgroud)
但这不太对
git ×10
bash ×3
branch ×3
shell ×2
git-branch ×1
jenkins ×1
powershell ×1
sh ×1
tags ×1
travis-ci ×1