相关疑难解决方法(0)

git:撤消所有工作目录更改,包括新文件

如何删除工作目录中的所有更改,包括新的未跟踪文件.我知道这样git checkout -f做,但它不会删除自上次提交后创建的新的未跟踪文件.

有人知道怎么做吗?

git

1108
推荐指数
9
解决办法
60万
查看次数

Git - '假设未改变'和'跳过工作树'之间的区别

我对一个我不想提交到我的存储库的文件进行了本地更改.它是用于在服务器上构建应用程序的配置文件,但我想在本地使用不同的设置进行构建.当然,当我将'git status'作为要上演的东西时,该文件总是显示出来.我想隐藏这个特定的更改而不是提交它.我不会对文件进行任何其他更改.

经过一番挖掘后,我看到了两个选项:'假设未改变'和'跳过工作树'.这里的前一个问题谈到了它们,但并没有真正解释它们之间的区别.我的问题是:这两个命令有何不同?为什么有人会使用其中一个?

git git-index

400
推荐指数
3
解决办法
6万
查看次数

强制LF eol在git repo和工作副本中

我在github上托管了一个git存储库.许多文件最初是在Windows上开发的,我对行结尾并不太谨慎.当我执行初始提交时,我也没有任何git配置来强制执行正确的行结束.结果是我的github存储库中有许多带有CRLF行结尾的文件.

我现在部分在Linux上开发,我想清理行结尾.如何确保文件在github上使用LF正确存储,并在我的工作副本中使用LF?

我已经设置了一个.gitattributes包含text eol=LF; 那是对的吗?有了这个承诺和推动,我可以只是rm我的本地仓库并从github重新克隆以获得所需的效果吗?

git github eol

153
推荐指数
4
解决办法
8万
查看次数

为什么git不能通过路径进行硬/软复位?

$ git reset -- <file_path> 可以通过路径重置.

但是,$ git reset (--hard|--soft) <file_path>会报告如下错误:

Cannot do hard|soft reset with paths.
Run Code Online (Sandbox Code Playgroud)

git git-reset

123
推荐指数
5
解决办法
6万
查看次数

什么是“git restore”命令,“git restore”和“git reset”有什么区别?

当我想取消暂存文件时,我所有的 Git 教程都显示如下内容:

$ git add *
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    README.md -> README
    modified:   CONTRIBUTING.md
Run Code Online (Sandbox Code Playgroud)

此提示告诉我们git reset用于取消暂存文件。

但是,在我的终端中,我看到:

git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    renamed:    cat.js -> catcat.js
    renamed:    tolendo.gogo -> tolendo.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    readme (copy).md
    tolendo (copy).txt
    zing (copy).html
Run Code Online (Sandbox Code Playgroud)

我的终端告诉我使用,git …

git restore git-reset unstage

107
推荐指数
4
解决办法
8万
查看次数

git"revert"当前目录

在svn中,可以执行svn revert ./*当前目录和仅当前目录的还原.

相当于svn revert只有当前目录被还原的git是什么?

我知道有git reset --hard,但它会恢复所有内容,而不仅仅是当前目录.

我如何只恢复git中的当前目录?

git version-control revert reset git-checkout

31
推荐指数
3
解决办法
3万
查看次数

git假设未更改vs跳过工作树 - 忽略符号链接

我有一个git存储库和Windows的问题.问题是git存储库中有一个linux符号链接,并且开发人员运行windows,这显然不起作用.现在因为这个符号链接永远不会改变,我想找到一种方法来删除开发人员并在其位置添加一个文件夹(这是符号指向的),但让git忽略这些特定的更改.现在我可以删除符号链接,创建一个同名文件夹,只需添加一个忽略所有内容的.gitignore.现在,为了确保git忽略了符号链接的删除,我在研究时发现了两种可能的解决方案.我找到的解决方案是:

git update-index --assume-unchanged [FILE]
git update-index --skip-worktree [FILE]
Run Code Online (Sandbox Code Playgroud)

我的问题是哪种方案效果最好?我想确保一旦我这样做,除非我特意这样做,否则它永远不会被撤消.我想确保恢复,重置,创建分支,合并等...一切正常.

git symlink git-index

24
推荐指数
1
解决办法
8190
查看次数

为什么排除的文件会在我的git稀疏结帐中重新出现?

我使用GCC git镜像,因为我只使用C和C++前端,我使用git的稀疏checkout功能来排除我不需要的数百个文件:

$ git config core.sparseCheckout
true
$ cat .git/info/sparse-checkout 
/*
!gnattools/
!libada/
!libgfortran/
!libgo/
!libjava/
!libobjc/
!libquadmath/
!gcc/ada/
!gcc/fortran/
!gcc/go/
!gcc/java/
!gcc/objc/
!gcc/objcp/
!gcc/testsuite/ada/
!gcc/testsuite/gfortran.dg/
!gcc/testsuite/gfortran.fortran-torture/
!gcc/testsuite/gnat.dg/
!gcc/testsuite/go.dg/
!gcc/testsuite/go.go-torture/
!gcc/testsuite/go.test/
!gcc/testsuite/objc/
!gcc/testsuite/objc.dg/
!gcc/testsuite/obj-c++.dg/
!gcc/testsuite/objc-obj-c++-shared/
Run Code Online (Sandbox Code Playgroud)

这工作了一段时间,但后来我发现其中一些被排除的文件已经返回,有时很多:

$ ls gnattools/
ChangeLog  configure  configure.ac  Makefile.in
$ ls  gcc/fortran/ | wc -l 
86
Run Code Online (Sandbox Code Playgroud)

我不确定文件何时重新出现,我做了很多切换到不同的分支(远程跟踪和本地),这是一个非常繁忙的回购,所以有新的变化经常拉.

作为git的相对新手,我不知道如何"重置"我的工作树以再次摆脱这些文件.

作为一个实验,我尝试禁用稀疏检出和拉动,认为我可以再次启用sparseCheckout以某种方式更新树,但这不能很好地工作:

$ git config core.sparseCheckout false
$ git config core.sparseCheckout 
false
$ git pull
remote: Counting objects: 276, done.
remote: Compressing objects: 100% (115/115), …
Run Code Online (Sandbox Code Playgroud)

git sparse-checkout

13
推荐指数
1
解决办法
4500
查看次数

Git和IntelliJ行分隔符问题

我正在IntelliJ 15.0.3使用Git通过Git Bash(提交和推送更改).当我fetch从远程git存储库提交文件时,它包含不同的行分隔符(混合模式或如何调用它).我的意思是一些行结束,CRLF一些行以LF(相同的文件)结束.

当我在IDEA中进行更改时 - 文件会自动保存,并且所有行分隔符都会减少(更改)为IDEA默认行分隔符(LF对我来说).

并且git将这些更改视为对文件的更改,因此我提交了大量更改的文件:

- some line
+ some line
Run Code Online (Sandbox Code Playgroud)

因为some line [CRLF]改成了some line [LF].

如何配置Git忽略此配置或如何配置IntelliJ IDEA为在此混合模式下保留文件?我不想在没有变化时提交更改.

git intellij-idea

9
推荐指数
1
解决办法
9580
查看次数

Git 签出到外部工作树并删除已删除的文件

我们想要使用 Git 在我们的网络服务器上部署代码。因此,我们在生产服务器上初始化了一个裸存储库。每当我们发布新版本时,我们都会在网站的 DocumentRoot 中执行 git checkout:

git --work-tree=/path/to/webroot/ checkout -f master
Run Code Online (Sandbox Code Playgroud)

在 的子目录中webroot,有几个 Git 不跟踪的文件(缓存文件、用户上传的文件等)。当然,在执行签出时,Git 不能删除这些内容(到目前为止,这部分工作正常)。

然而,Git 也不会删除以前跟踪过但同时被删除的文件(例如,它们在开发过程中因为不再需要而被删除)。目前,此类文件在该过程中仍然存在checkout,从而导致“死”文件的数量稳步增加。有没有办法让 Git 在执行时删除此类文件checkout

编辑-重现步骤:

# create dirs and repos
cd /base/path
mkdir repo.git
mkdir target
cd repo.git && git init

# create, add and commit two files
touch test1.txt
touch test2.txt
git add test1.txt test2.txt
git commit -m testcommit

# checkout to target directory
git --work-tree=../target checkout master -f
# target directory now contains both files …
Run Code Online (Sandbox Code Playgroud)

git dvcs git-checkout

4
推荐指数
1
解决办法
1556
查看次数

如何从工作目录而不是登台区域重置所有文件?

有没有一种方法可以重置工作目录中的所有文件,而不能重置暂存区中的所有文件?

我知道使用以下命令可以重置任何单个文件:

git checkout thefiletoreset.txt

另外,通过使用以下命令,可以将整个存储库重置为最后的提交状态:

git reset --hard

但是,是否有任何命令可以重置整个工作目录,而使暂存区域保持不变?

git

1
推荐指数
2
解决办法
1641
查看次数