如何删除工作目录中的所有更改,包括新的未跟踪文件.我知道这样git checkout -f做,但它不会删除自上次提交后创建的新的未跟踪文件.
有人知道怎么做吗?
我对一个我不想提交到我的存储库的文件进行了本地更改.它是用于在服务器上构建应用程序的配置文件,但我想在本地使用不同的设置进行构建.当然,当我将'git status'作为要上演的东西时,该文件总是显示出来.我想隐藏这个特定的更改而不是提交它.我不会对文件进行任何其他更改.
经过一番挖掘后,我看到了两个选项:'假设未改变'和'跳过工作树'.这里的前一个问题谈到了它们,但并没有真正解释它们之间的区别.我的问题是:这两个命令有何不同?为什么有人会使用其中一个?
我在github上托管了一个git存储库.许多文件最初是在Windows上开发的,我对行结尾并不太谨慎.当我执行初始提交时,我也没有任何git配置来强制执行正确的行结束.结果是我的github存储库中有许多带有CRLF行结尾的文件.
我现在部分在Linux上开发,我想清理行结尾.如何确保文件在github上使用LF正确存储,并在我的工作副本中使用LF?
我已经设置了一个.gitattributes包含text eol=LF; 那是对的吗?有了这个承诺和推动,我可以只是rm我的本地仓库并从github重新克隆以获得所需的效果吗?
$ 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 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 …
在svn中,可以执行svn revert ./*当前目录和仅当前目录的还原.
相当于svn revert只有当前目录被还原的git是什么?
我知道有git reset --hard,但它会恢复所有内容,而不仅仅是当前目录.
我如何只恢复git中的当前目录?
我有一个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)
我的问题是哪种方案效果最好?我想确保一旦我这样做,除非我特意这样做,否则它永远不会被撤消.我想确保恢复,重置,创建分支,合并等...一切正常.
我使用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) 我正在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 在我们的网络服务器上部署代码。因此,我们在生产服务器上初始化了一个裸存储库。每当我们发布新版本时,我们都会在网站的 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 checkout thefiletoreset.txt
另外,通过使用以下命令,可以将整个存储库重置为最后的提交状态:
git reset --hard
但是,是否有任何命令可以重置整个工作目录,而使暂存区域保持不变?