通常,要放弃对文件的更改,您将执行以下操作:
git checkout -- <file>
Run Code Online (Sandbox Code Playgroud)
如果我要丢弃的更改是删除文件怎么办?以上行会出错:
error: pathspec '<file>' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)
什么命令将恢复该单个文件而不撤消其他更改?
奖励点:另外,如果我要丢弃的更改是添加文件怎么办?我想知道如何取消这种变化.
我的git存储库中有一些旧的分支,不再处于活动开发状态.我想存档分支,以便它们在运行git branch -l -r时默认不显示.我不想删除它们,因为我想保留历史记录.我怎样才能做到这一点?
我知道可以在refs/heads之外创建一个ref.例如,refs/archive/old_branch.这样做会有什么后果吗?
我知道如何解决这个问题:
user@host$ git pull
Updating 9386059..6e3ffde
error: Your local changes to the following files would be overwritten by merge:
foo.bar
Please, commit your changes or stash them before you can merge.
Aborting
Run Code Online (Sandbox Code Playgroud)
但是,是不是有办法让git pull
做stash
和pop
舞蹈给我吗?
如果此命令具有不同的名称,则可以.
创建shell别名git stash; git pull; git stash pop
是一种解决方案,但我寻找更好的解决方案.
当我运行时git add -p
,有没有办法让git选择新制作的文件作为选择?
因此,如果我创建一个新文件foo.java
,然后运行git add -p,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).
我只看到一个git config命令如下:
git config --global alias.out \!"git fetch; git cherry origin/HEAD -v"
Run Code Online (Sandbox Code Playgroud)
这是什么意思?它等于这个:
git config --global alias.out '!git fetch; git cherry origin/HEAD -v',
Run Code Online (Sandbox Code Playgroud)
我对感叹号感到困惑,任何帮助将不胜感激.
我正在使用Git Bash v1.8.1,带有一些别名(用于测试):
[alias]
ekko = !echo $1 && echo $1
ekko2 = !sh -c 'echo $1 && echo $1'
Run Code Online (Sandbox Code Playgroud)
但是当我运行它们时,我看到:
> git ekko master
master
master master
Run Code Online (Sandbox Code Playgroud)
和:
> git ekko2 master
(blank line)
(blank line)
Run Code Online (Sandbox Code Playgroud)
我的预期行为是:
> git ekko master
master
master
Run Code Online (Sandbox Code Playgroud)
我对别名相当新 - 我正在寻找一种方法来确保我的参数被完全消耗,而不是附加到别名的末尾.一些调查表明这种行为在Git v1.7.x附近发生了变化,我还没有确定如何完成这个:
我知道可以使用&&
(and) 语句为同一别名运行多个命令。然而,对于长组合,它会失去可读性。例如:
save = !git status && git add -A && git commit -m \"$1\" && git push --force && git log && :
Run Code Online (Sandbox Code Playgroud)
有没有多行的写法?
{}
例如,也许用它包裹它?
我根据需要创建了一个别名来跟踪我的跟踪分支。这[alias]
是我的 .gitconfig 部分的当前行:
catchup = !CURRENTBRANCH=$(git symbolic-ref --short HEAD) && echo Currently on $CURRENTBRANCH - switching to $1 && git checkout $1 && git merge origin/$1 && echo Going back to $CURRENTBRANCH && git checkout "$CURRENTBRANCH"
Run Code Online (Sandbox Code Playgroud)
我按如下方式使用它(例如):
git catchup new_design
Run Code Online (Sandbox Code Playgroud)
此代码导致(例如):
Currently on integration
Switched to branch 'new_design'
Your branch is behind 'origin/new_design' by 1 commit, and can be fast-forwarded.
Updating c82f7db..51eea8a
Fast-forward
themes/theme1/css/styles.less | 17 +++++++++++++++++
themes/theme1/js/app.js | 6 +++---
2 files changed, 20 insertions(+), 3 deletions(-) …
Run Code Online (Sandbox Code Playgroud) 是否有一些快捷方式来指定远程跟踪分支的提取,新提交的间隔?而不是键入也是分支特定的长命令:
git log branchName..origin/branchName
Run Code Online (Sandbox Code Playgroud)
我正在寻找一些git interval hack,它将代表branchName..origin/branchName的间隔,类似于(不工作,相当于git log ..origin/HEAD)
git log ..origin
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个别名来初始化存储库,但它不起作用,我不太确定为什么,这是别名:
> git config --global alias.init-setinfo "git init && git config --global user.name \"myName\" && git config --global user.mail \"myMail@gmail.com\""
Run Code Online (Sandbox Code Playgroud)
调用它会返回:
> expansion of alias 'init-setinfo' failed; 'git' is not a git command
Run Code Online (Sandbox Code Playgroud)