该混帐书定义git的指标:
Git索引用作工作目录和存储库之间的临时区域.您可以使用索引构建一组要一起提交的更改.创建提交时,提交的内容是索引中当前的内容,而不是工作目录中的内容.
但是我仍然很难理解它,特别是突出的声明"所承诺的不是我工作目录中的内容".
到目前为止,在我有限的使用Git的工作,一切都在工作目录始终致力于,如果我这样做:
git add <all new files in the working directory>
git commit -a -m "git will refuse to commit without this comment"
Run Code Online (Sandbox Code Playgroud)
git然后提交所有修改过的文件以及所有新文件.
那么,实际上,我的工作目录是暂存区域?
我不确定git index它是什么以及它如何被解释为临时区域.
你能解释一下吗?
我有一个正常的repo,其中有一个工作树和一个.git文件夹在与工作树相同的目录中.
我正在尝试使用该命令从该位置外部运行git命令
git --git-dir=/path/to/repo/.git --work-tree=/path/to/repo pull /some/other/repo master
Run Code Online (Sandbox Code Playgroud)
但我一直在收到错误fatal: /usr/libexec/git-core/git-pull cannot be used without a working tree..
我究竟做错了什么?
我想摆脱远程分支上的一些提交.例如,如果历史记录如下:
A->B->C->D
Run Code Online (Sandbox Code Playgroud)
我想删除C和D给我:
A->B
Run Code Online (Sandbox Code Playgroud)
哪个B现在是HEAD?
我想提交并推送两个新文件,这些文件位于项目的.gitignore中列出的文件夹中.我想我可以只更改.gitignore文件,但后来我需要两次提交:一次提交推送两个新文件,另一次提交重置.gitignore.如果可能的话,我想在一次提交中这样做.
有没有办法提交和推送被忽略的特定文件?
让我们说我们的提交历史看起来像
1--2--3--4
^
HEAD
其中4是最近的提交.
有没有办法将提交2(2和1之间的差异)的更改重播到提交4?
你可能想知道为什么有人想这样做.让我们说这是你的生产分支,总是应该处于工作状态.让我们说早一点,当提交历史看起来像
1--2
^
HEAD
你有一个实现,并认为提交2可能会破坏一切,所以你迅速推出了一个恢复提交,其中提交3恢复提交2.然后有人使提交4包含你想要保留的好内容.此时您意识到提交2实际上是正常的,因此您希望在4之上重播它.
我昨天能够罚款.但是今天(我没有改变任何东西),当我承诺:
$ git add config.h
$ git commit -m "Update config.h to reset the values"
error: Couldn't set refs/heads/master
fatal: cannot update HEAD ref
Run Code Online (Sandbox Code Playgroud)
我知道在拉或推过程中也可能发生这种错误.但我还没有找到解决方案来修复它.
我的.git/config文件如下所示:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
[remote "origin"]
url = git@SOME_URL
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
Run Code Online (Sandbox Code Playgroud) 我知道启动新分支的命令是
git checkout -b <mybranch>
Run Code Online (Sandbox Code Playgroud)
但是,假设我有先见之明,在进行我想要提交的新更改之前创建了新分支。
但通常情况并非如此。通常,我开始编码,然后可能会也可能不会git add . 想要在新分支中提交。我怎么做?
我经常需要复制并粘贴GitHub提交的一部分.然而,每当我这样做时,我发现自己手动沿着每条线走下去并且击中Delete所有的+/-标志.
有没有更方便的方法将GitHub提交的一部分复制到剪贴板?
欢迎涉及Chrome扩展程序/您的个人项目的建议.
通常我使用两台电脑,例如:PC1和PC2。
在他们两个上我都使用CygWinon Windows 10。
他们有相同的配置。
我试图PC1对如何显示日期和时间进行一些调整:
$ git log
Run Code Online (Sandbox Code Playgroud)
我正在尝试多个bashandgit命令。
过去和现在PC2我这样做时:
$ date
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
Tue Sep 25 16:17:34 CDT 2018
Run Code Online (Sandbox Code Playgroud)
但在PC1(错误的)上,使用相同的命令,我得到:
Tue, Sep 25, 2018 16:17:34
Run Code Online (Sandbox Code Playgroud)
您可以看到该TimeZone指示器没有显示。
另外,现在PC1,当我进行提交然后用以下命令列出历史记录时:$ git log日期如下:
Date: Tue Sep 25 22:58:42 2018 +0100
Run Code Online (Sandbox Code Playgroud)
它应该在哪里:
Date: Tue Sep 25 16:58:42 2018 -0500
Run Code Online (Sandbox Code Playgroud)
因为我当前的时区是:( CDT) America/Chicago( -05:00)
关于如何解决这个问题有什么想法吗?
谢谢!
[编辑1]
回应@Johan …
我想用 gpg 密钥签署我的 git 提交,export GPG_TTY=$(tty)我的 .zshrc 文件中有该行。当我获取 .zshrc 时,我可以创建签名提交。
我发现在一段时间后,在 vscode 集成终端(我没有在 iTerm 窗口中尝试过这个)中,我会得到failed to sign commit, make sure to set email, username. 但一旦我再次导出,它就会按预期工作。
我还下载了 gpg 套件,以允许我仍然签署提交,这似乎使这个问题消失了。但我希望在我解决这个问题时将其作为一个临时解决方案。
我不确定什么会导致 GPG_TTY“过期”。
我使用的是 Mac,带有 zsh 和 Powerlevel 10k。(这个问题在我开始使用p10k之前就存在)
任何和所有的帮助都是值得赞赏的!
git ×10
git-commit ×10
github ×2
bash ×1
cygwin ×1
datetime ×1
diff ×1
git-branch ×1
git-checkout ×1
git-index ×1
git-pull ×1
git-push ×1
gitignore ×1
gnupg ×1
zsh ×1