该混帐书定义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它是什么以及它如何被解释为临时区域.
你能解释一下吗?
我有一个很大的代码库,几乎每个文件都没有正确对齐,变量或方法之间的间距差,或者只是丑陋的代码.
我希望在使用它时能够做得更好,但修复缩进等事情会使提交历史变得非常难看.
我不是在谈论小的缩进问题,其中一行是一个空格,我说的是类似的东西
class Xyz
def foo
end
def bar
@something
end
end
Run Code Online (Sandbox Code Playgroud)
在保持历史相关性的同时,清理这样的代码有什么好方法?我是否应该立即自动对齐所有内容并执行一次大量提交?
我有一个正常的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..
我究竟做错了什么?
我正在尝试将特定项目的连续快照放入git的历史记录中.我这样做是通过使用每个快照的内容填充存储库目录然后运行
git add -A .
git commit -m 'Version X'
Run Code Online (Sandbox Code Playgroud)
这是本答案中推荐的方法.但是,我看到只有当100%的文件内容保持不变时,提交才会识别文件重命名.有没有办法影响重命名检测,git commit使其找到重命名文件内容已经改变了一点?我看到了git merge并且git diff有各种控制重命名阈值的选项,但这些选项不存在git commit.
我尝试过的事情:
为每个快照创建一个单独的分支,然后将连续的分支合并到master使用上
git merge -s recursive -Xtheirs -Xpatience -Xrename-threshold=20
但是,这使我保留了旧版本的重命名文件,同时也无法检测到重命名.
当我使用vim编辑提交消息(通过输入git commit)时,vim会打开,但首先会提示YouCompleteMe插件不可用:
$ git commit
YouCompleteMe unavailable: requires Vim 7.3.584+
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)
当我:version按下后检查版本时ENTER,我看到vim 7.3正在运行.但是,如果我直接从命令行启动vim(不使用git commit),我看到我正在运行vim 7.3.754.我怎么能告诉git使用更新版本的vim?
我在Xcode中使用源代码控制提交了我的项目.提交后,我意识到我忘了在提交消息中添加一些内容.
如何返回并更新提交消息?
当我尝试使用提交时git commit,sublime文本编辑器确实打开了,我写了提交消息并保存并关闭了编辑器,但更改没有被提交.终端被绞死了git commit.
我在网上搜索,发现有同样问题的人并且在没有考虑任何问题的情况下应用了相同的修复.我跑了命令:
git config --global core.editor "mate -w"
Run Code Online (Sandbox Code Playgroud)
现在我跑的时候出现了一个新的错误git commit:
mate -w:1:mate -w:mate:not found error:编辑器'mate -w'出现问题.请使用-m或-F选项提供消息.
请帮忙.我是git并使用Ubuntu 14.04的新手.
我pre-receive在git远程分支上创建一个钩子有问题,做我想要的.
有什么问题?
不允许直接提交到主分支.只允许合并到主分支中.
解
到目前为止,我的解决方案是检查主用户受到影响的用户推送是否有变化.但问题是,如果更改是直接提交或合并,我无法区分.
#!/bin/sh
while read oldrefid newrefid refname
do
if [ "$refname" = "refs/heads/master" ]; then
echo $(git merge-base $oldrefid $newrefid)
echo "---- Direct commit to master branch is not allowed ----"
echo "Changes only with a merge from another branch"
exit 1
fi
done
Run Code Online (Sandbox Code Playgroud)
有谁有想法,如何检查更改是否合并?
谢谢!
我昨天能够罚款.但是今天(我没有改变任何东西),当我承诺:
$ 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) 有一个回购说ABC/A. 我把这个回购分发给我自己的github说ME/A. 我被要求在ME/A上创建一个分支x(最初是开发和主人).我不得不写一些代码,所以我克隆了ABC/A并开发了它的开发分支.但是现在当我必须推送代码时,我无法将其推送到ABC/A,因为我没有权利这样做.我必须将代码推送到ME/A. 问题是,我参与了ABC/A的开发分支,但我必须将代码推送到ME/A x分支.是否有可能以这种方式推送代码?