好吧,让我们说有一天我们做了一些修改,当我们去提交它们时,我们注意到我们正在处理错误的分支.
我们如何强制git切换分支而不丢弃本地更改.
在我等待回复的时候,我可能会以天真的方式解决这个问题,但我想知道如果我说的话是正确的程序,如果我说之前没有发生这种情况......
git reset --hardgit checkout right-branchgit commit -m "changes"当我想取消暂存文件时,我所有的 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的说法)可能指的是相关但不同的东西:
但是,我已经看到这个术语过去常常是指三种可能的用法以外的东西(下面有更多细节).在Git上下文中,我的列表中缺少的"分支"一词是否还有其他有效和明确的用法?
使用Git大约一年后,我正在为CS学生准备一个简短的教程.我真的想要确定Git术语,以避免任何混淆.
当然,我现在已经使用Git分支了一段时间; 我很习惯使用它们并且发现Git分支模型很棒.但是,我仍然发现术语"分支"有问题且含糊不清,因为它似乎至少引用了两个不同的东西,具体取决于它所使用的上下文...有时甚至在同一个教程/手册中.
Pro Git书(3.1中 - 分支是什么),在显示下图后,

继续将分支定义为
只是一个指向其中一个提交的轻量级可移动指针.
据我所知,这也是Git手册页中"分支"的含义.
我对这个定义非常满意.我认为分支只是指向DAG中特定提交的引用,而分支的"提示提交"是该引用指向的提交.到现在为止还挺好.可是等等...
该Atlassian的Git的教程介绍分支如下:
分支代表独立的发展路线.
我猜他们的意思是一串提交.让我改进一下这个想法......唯一对我有意义的解释是术语"分支"也可以指存储库的提交DAG的子图,该提交DAG由所考虑的提示提交可到达的所有提交组成.
但是,Pro Git书籍也包含以下图表(参见3.4 - 分支工作流程),

这似乎与我的解释相矛盾,因为它似乎暗示只有提交C2- C5(不C1)属于develop分支,并且只提交C6- C7(不是C1- C5)属于topic分支.
我发现这种用法含糊不清,因为如果我在那个阶段绘制DAG,而不知道分支引用在过去指向的位置,并且没有任何假设三个分支之间的任何层次结构,我会得到的是

我还发现其他Git学习资源中的一些图表令人困惑.特别考虑以下内容(取自Lynda.com的介绍视频- Git Essential Training):

这里,尖端master是实际 534de(和HEAD指向master),但图中的"主"标签的位置是非常误导.在这种情况下,该标签应该描述的是我不清楚的......
编辑:我已经 …
我和其他几个人都可以访问包含 IDE 自动生成的一个文件的存储库。该文件是特定于 PC 的,因此不应位于源代码管理中,但目前是。我想删除它并将其添加到.gitignore,但我不希望其他协作者在拉取我的更改时将其删除。关于删除文件但保留本地副本存在很多问题;但他们不覆盖其他用户,所以当他们拉动时,尽管我保留了我的副本,他们仍然会丢失副本:
还有一些问题和解决方案,可以在拉取时不丢失本地文件,这样他们就可以保留文件,但这需要拉取时的明确操作,我不想去告诉每个人到底如何拉取这个文件时间。我确实发现了两个重复的问题。得到的答案是不可能,但那都是 5 年前的事了——这期间有什么变化吗?
这很重要,因为该文件是在您首次导入整个项目时自动生成的,并且包含有关本地编译器/库版本的信息。所以删除它需要重新导入。如果有什么区别的话,那就是.idea/scala_compiler.xmland .idea/scala_settings.xml(实际上整个.idea目录应该被忽略)。基本上我想让 Git 将一个文件设置为不再跟踪,但不为任何人删除它。
我在玩git,在这里感到困惑。
该HEAD的develop分支是在
235a6d8
当我做:
git checkout 235a6d8
Run Code Online (Sandbox Code Playgroud)
从任何其他分支机构或develop分支机构,这使我陷入了孤立的头脑。
我不确定在签出该分支的最新提交时为什么会发生这种情况。
当我做:
git checkout develop
Run Code Online (Sandbox Code Playgroud)
我可以正确切换到开发分支。
我git checkout <commit-has>和之间没有区别git checkout branchname。
它们有何不同?
我还在学习Git的过程中,当我觉得我已经掌握了它的时候......我遇到了一个问题,让我再次感觉自己是一个新手......
我有一个主控和一个分支。由于某些“只有上帝知道”的原因,当我在两个分支上执行“Git status”时,它们显示相同的更改。
当我将这些更改提交给其中一个时......我在另一个中看不到它们......
Master*: Git status
On branch Master
Changes not staged for commit:
modified: Config/A.txt
Untracked files:
logs/B.txt
**Branch-1*: Git status**
On branch Branch-1
Changes not staged for commit:
modified: Config/A.txt
Untracked files:
logs/B.txt
Run Code Online (Sandbox Code Playgroud)
你暂时是上帝,:)
当我切换分支时,如果本地是干净的并且在其原始对应物之后,我想总是从源中提取最新的更改。本地分支是其远程分支的跟踪分支,fetch 按预期工作。
可以将 Git 配置为自动执行此操作吗?
是否有一个存储库范围的设置来为所有分支执行此操作?(我们的分支经常被创建和删除,因为公司政策是每个任务一个分支,在审查时被 PR 和合并)
编辑:
对于上下文,我使用 Visual Studio 2017 及其用户界面来执行 Git 命令。让 Git 保持最新没有问题。我需要使用命令行执行一些 Git 命令,例如重命名分支或隐藏 repo 设置。
当我说“本地是干净的”时,是的,它指的是来自git status和 VS的工作树,其中没有传出提交或本地修改的文件。VS 有一个非常漂亮的 UI,可以实时显示这些信息。
经过
(我们的分支经常被创建和删除,因为公司政策是每个任务一个分支,在审查时被 PR 和合并)
这应该是一种说“我真的不想为每个分支设置此设置或连接”的即兴方式,但解释是:
我们创建自己的本地分支,从主分支中分离出来来完成一项任务。在 VS 中,这是“从...创建本地分支”,它使用所需的名称执行分支的检出。在幕后,我确定这相当于git checkout -b fillcatnip master. fillcatnip是一个未跟踪的本地分支,直到推送到远程,但它将作为新分支推送fillcatnip而不是原始master. 在这一点上,它成为一个跟踪分支,并且可以master在任务完成时给出一个拉取请求 (PR) 以合并回。但是如果master在 PR 可以实现之前已经移动并发生冲突,那么在冲突解决之前无法合并分支。发生这种情况时,我可能已经开始了另一项任务。因此,如果我保存当前正在执行的任务(提交和推送、存储等),然后切换回冲突的分支,我想要该分支的远程副本而不是我自己的本地副本,因为有人可能已经推送在等待合并时对其进行更改。
这种情况:
git stash 在分支A上git checkout Bgit stash 在分支B上git checkout Agit stash pop 在分支A上在上述清单的第7步之后,我在存储之前在分支A上所做的更改没有恢复,但是在分支B上进行的更改在分支A上弹出。我cmd z在分支A上使用了该文件,并回到了先前的状态,有我所做的更改。这似乎分支的移动分支B的同样的事情发生在头部头部时,我git checkout B和git stash pop该分支:分支B的所有分支一所做的更改,但不是我的分支B.我所做的更改用于cmd z再恢复到我需要的分支状态。
一段时间以来,这给我带来了很多问题,直到被允许再次在项目上提交代码(没人可以提交一段时间,因为提交时会自动将服务器推送到服务器,并且经理不希望新的代码出现在服务器中)。服务器,直到他们运行了一些测试)。如何仅弹出分支本身所做的更改,而不弹出其他分支所做的更改?
我正在一个分支上工作,突然我不得不切换到另一个分支来修复一个紧急错误。问题是我对当前分支所做的更改仍然一团糟,我不想提交并留下一些杂乱无章的提交消息。
有什么方法可以在不提交的情况下保存当前更改?
git ×10
branch ×2
git-branch ×2
git-checkout ×1
git-pull ×1
git-reset ×1
git-stash ×1
github ×1
ignore ×1
restore ×1
terminology ×1
unstage ×1