是否git rm <object>仅影响所有分支机构或HEAD?根据我的理解,答案是肯定的,因为要使该命令有效,必须遵循一个commit命令,但这就是我的问题.
那么git rm --cache <object>,因为它不会从工作目录树中删除文件而是被跟踪并将对象添加到.gitignore
我的问题:
如果我想创建一个新分支,我会这样做:
git checkout -b new-branch
Run Code Online (Sandbox Code Playgroud)
然而,有时这个分支已经存在,例如:
fatal: A branch named 'new-branch' already exists.
Run Code Online (Sandbox Code Playgroud)
有比执行以下操作更简单的方法吗?
git branch -D new-branch
git checkout -b new-branch
Run Code Online (Sandbox Code Playgroud)
我尝试了这个,但它不起作用:
git checkout -b new-branch --force
Run Code Online (Sandbox Code Playgroud) 考虑一下我们将以下命令应用于hello.txtgit 下跟踪的文件(在干净的工作副本中):
echo "hi" >> hello.txt
mv hello.txt bye.txt
git rm hello.txt
git add bye.txt
git status
Run Code Online (Sandbox Code Playgroud)
结果:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: hello.txt -> bye.txt
Run Code Online (Sandbox Code Playgroud)
因此,git 知道它是同一个文件,即使它被重命名了。我有一些模糊的记忆,git 检查 inode 以确定新文件与旧的已删除文件相同。 不过,这个和这个SO 答案表明 git 只检查文件的内容,并且不会以任何方式检查它是否是相同的 inode。(我的结论(*):如果我对文件进行更大的修改,git 将不会检测到重命名,即使 inode 仍然相同。)
因此,在我看来,很明显,我错了,git 不检查 inode(或任何其他文件系统信息),只检查内容。但后来,我发现了另一个答案,它声称
除了时间戳之外,它[即git]还记录lstat的大小、inode和其他信息,以减少误报的机会。当您执行 git-status 时,它只需对工作树中的每个文件调用 lstat 并比较元数据,以便快速确定哪些文件未更改。
我对此实际上有两个问题:
Git 确实依赖(也)依赖 inode 来检测文件是否已更改,但它不使用 inode 来检测文件重命名。
我正在使用 git 提交我的项目更改。
以此目的 :-
现在,我有两个疑问:-
a)我可以直接将任何代码推送到空主分支而不进入两个分支的合并过程吗?
b) 如何将第二个分支与空的主分支合并
我想忽略git 项目workspace文件夹内的文件。为此.obsidian/我修改了我的文件。.gitignore
这是我的 .gitignore 文件:
\n .obsidian/cache\n .obsidian/workspace\n .trash/\n .DS_Store\nRun Code Online (Sandbox Code Playgroud)\n但是,当文件更改时我仍然收到此消息:
\n .obsidian/cache\n .obsidian/workspace\n .trash/\n .DS_Store\nRun Code Online (Sandbox Code Playgroud)\n我不知道为什么会发生这种情况或该怎么办。
\n我在不同的存储库中有一些项目,我想将它们与不同的孤立分支合并在同一个存储库下。为此,我创建了一个新的存储库并在其中启动它。
如何获取现有的存储库,将其作为孤立分支导入并保留历史记录?
是否可以使用作为不同文件夹打开的 2 个孤立分支?假设我有 2 个孤儿分支,我想同时处理这两个分支,可能吗?我有超过 2 个,我想使用打开的单个 git UI,这样开发起来会更有效率。今天我检查了每个存储库。将其合并到同一个存储库下后,我仍然需要并行处理所有分支。
orphan-branch-B
\.gitignore
\.README.md
\ and more
orphan-branch-B
\.gitignore
\.README.md
\ and more
Run Code Online (Sandbox Code Playgroud) 在暂存文件(跟踪文件)后,我意识到它需要一些更改,因此我使用
git rm --cached <filename>. 结果,我失去了所有的变化。有没有办法撤销它?
我遇到了一个奇怪的Git行为:我有一个存储库,其中包含文件中指定的许多未跟踪文件和文件夹.gitignore.
我做的确切步骤:
git stashgit checkout <hash of first commit>git checkout <my working branch>git stash apply然后我注意到一些(不是全部)我未跟踪的文件和文件夹已经消失了.怎么可能?
附加信息:
被隐藏的文件与消失的文件无关,我注意到存储操作只是为了完整性
我没有执行其中一个命令,git stash --include-untracked或者git stash save -u像@Ashish Mathew猜测的那样
似乎只有文件和文件已经消失,但是在.gitignore第一次提交时还没有,但后来被添加到了它中
如果我在暂存区域中有一个文件(显示在 中git diff --cached)并且我想完全删除它,我该怎么做?
正在做
git reset HEAD -- file
git checkout -- file
Run Code Online (Sandbox Code Playgroud)
是的,但是这 2 个操作有 1 个命令吗?
如果我有一个远程分支,我可以在本地执行git checkout MyRemoteBranch并且它会正常工作。我所说的工作正常是指它将创建一个名为 MyRemoteBranch 的本地分支并切换到它,并且该本地分支将跟踪远程分支。
那么这种情况下,什么时候需要传递-b参数呢?当遥控器存在时,以下有什么区别:
git checkout MyRemoteBranch
Run Code Online (Sandbox Code Playgroud)
VS
git checkout -b MyRemoteBranch
Run Code Online (Sandbox Code Playgroud) 在我的本地仓库中,我有 3-4 个分支,当我处理其中一个分支时,我在其中所做的更改会传播到我所有的其他分支。事实上,如果我是git reset --hard origin其中之一,它会重置每个本地分支。
我应该如何将我的更改限制在一个分支中?
请注意,我是 git 的菜鸟。
我有两个分行
不知不觉中,我在 dev 分支中编写了一些未经测试而不允许在 dev 分支中使用的代码。我不想丢失我编写的所有代码。现在我想切换功能分支并将所有更改的文件添加到功能分支中。但是当我想签出功能分支时它会显示
Please commit your changes or stash them before you switch branches
Run Code Online (Sandbox Code Playgroud)
有任何方法可以切换功能分支并获取功能分支中所有更改的文件,以便我将这些文件添加到功能分支中。
Git 是否在内部存储特定的行尾?
我的猜测是,Git 仅存储行数据本身(行结束中性),并且根据操作系统,它将使用平台特定的行结束。
或者换句话说:每个行尾都可以“混合”存储在同一个文件中吗?
我不是在谈论.gitattributes文件中的设置。
git ×13
github ×4
branch ×2
file-rename ×1
git-branch ×1
git-checkout ×1
git-reset ×1
git-stage ×1
gitignore ×1
gitlab ×1
newline ×1
orphan ×1