当我第一次开始使用Git时,我发现checkout命令很混乱.但是,当我适应Git的版本控制模型时,它开始变得有意义了.现在我不得不向同事们教Git,我想checkout简单解释一下.我以为我有一个简单的解释(来自文档):
签出一个或多个工作树的路径
这似乎统一了一些你可以用结帐做的事情,这对于Git的新手来说似乎是一组多样化的操作:
git checkout .
git checkout HEAD .
git checkout HEAD~2
git checkout feature/update-readme README.md
Run Code Online (Sandbox Code Playgroud)
...除了最后一个,因为这不只是更新工作目录,它会分段文件.
我如何理解为什么或何时结账会导致某些事情上演而不是仅仅复制到工作目录中?
我有一个名为 VersionUtil 的文件并将其设置到 gitignore 中。在 gitignore 文件中,我有
# Git info
app/src/main/java/com/test/util/VersionUtil.java
Run Code Online (Sandbox Code Playgroud)
在android studio中运行项目之前,VersionUtil.java中有一行代码:
public static final String COMMIT_INFO = "info".
Run Code Online (Sandbox Code Playgroud)
我运行 git status 并返回
Your branch is up-to-date with 'origin/develop'.
Run Code Online (Sandbox Code Playgroud)
但是,在我运行该项目后,VersionUtil.java 发生了变化。那一行是:
public static final String COMMIT_INFO = "6a604 XXXXX ".
Run Code Online (Sandbox Code Playgroud)
返回的 git 状态
modified: app/src/main/java/com/test/util/VersionUtil.java
Run Code Online (Sandbox Code Playgroud)
你们有什么想法吗?为什么 gitignore 中的文件仍在被跟踪?任何帮助,将不胜感激。
如果我在暂存区域中有一个文件(显示在 中git diff --cached)并且我想完全删除它,我该怎么做?
正在做
git reset HEAD -- file
git checkout -- file
Run Code Online (Sandbox Code Playgroud)
是的,但是这 2 个操作有 1 个命令吗?
我运行了“ git reset”命令,但是我的未暂存更改已放入文件夹中。运行git status后,我得到如下内容:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: file1
modified: file2
modified: file3
modified: file4
modified: file5
Untracked files:
(use "git add <file>..." to include in what will be committed)
folder1
folder2
folder3
folder4
Run Code Online (Sandbox Code Playgroud)
每个文件夹都包含我修改过的多个文件,但是由于某种原因被归类到这些文件夹中。
我需要将这些更改分成多个拉取请求,因此“ git commit -a”将不会执行。
我看到的最佳解决方案是“ git add -all”,复制“ git status”,然后再次“ git reset”,但这似乎很费劲。
有更好的解决方案吗?