我使用以下命令从本地系统在 git 中创建了一个新分支:
git checkout -b branchname
Run Code Online (Sandbox Code Playgroud)
我的疑问是系统中的其他用户是否能够切换到这个新分支?或者我是否需要将更改推送到服务器,然后只有他们也可以访问它?
- 谢谢
我想我缺少一些关于 GIT 分支的基本概念。
假设我已经在我的机器上克隆了一个存储库,并开始工作(在本地“master”上)。
现在有人告诉我生产中的一个错误。
我想停止我正在做的所有事情(修改的归档和未推送的提交),创建一个基于服务器的功能分支,而不需要我在本地进行的更改,修复错误,提交并推送,然后返回到 master ,变基并继续工作。
我认为以下方法会起作用:
$ git clone <some repo>
$ vim text.txt
$ git checkout -b bugFix
Run Code Online (Sandbox Code Playgroud)
问题是分支“bugFix”包含我在 master 的状态中所做的更改。
如何创建一个干净的分支?
我只是想使用 git bash 创建分支,这样任何人都可以指导我如何做到这一点?
所以我知道我们可以使用以下命令将文件从其他分支检出到我们当前的工作分支中:
git checkout [someOtherBranch] [path/to/file]
Run Code Online (Sandbox Code Playgroud)
我希望这样的事情是可能的:
git checkout [someOtherBranch] [path/to/file] [path/we/want/to/copy/to]
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我想查看所有本地和远程标签。
要查看所有本地和远程分支,我使用:
git branch -a
Run Code Online (Sandbox Code Playgroud)
它以白色显示我的本地分支,以绿色显示当前分支,以红色显示远程(原始)分支。
但是-aforgit tag用于创建带有注释或消息的标签。
git branch -a显示所有本地标签和原始标签相当于什么标签?
我有一个topical被采取的development分支。现在topicalBranch领先于提交,同时development接受来自其他一些贡献者的拉取请求,并且更新的合并development与我的最新提交有冲突的更改C4。
所以当前的树看起来像:
C1---C2---C5 development
\
C3---C4 topicalBranch
Run Code Online (Sandbox Code Playgroud)
我希望新树看起来像:
C1---C2---C5 development
\
C3'---C4' topicalBranch
Run Code Online (Sandbox Code Playgroud)
其中 C3' 和 C4' 相对于 C5 进行了更改。我查了一下Git-Rebasing,但我想topicalBranch更新,而不对development.
topicalBranch使用分支上所做的更改更新我的最佳方法是什么development,以便我可以向development分支发出新的拉取请求。
git diff --no-index --no-prefix --summary -U4000 目录1 目录2
这按预期工作,因为它返回两个目录之间所有文件的差异。添加的文件按预期输出,删除的文件也会产生预期的 diff 输出。
但是,由于 diff 将文件路径考虑为文件名的一部分,因此两个不同目录中具有相同名称的文件会导致 diff 输出带有重命名标志,而不是更改。
有没有办法告诉 git 不考虑 diff 中的完整文件路径,而只查看文件名,就好像文件来自同一目录一样?
有没有办法让 git 真正知道不同目录中同一文件的副本是否确实被重命名?我不明白如何,除非它有一种以某种方式比较文件 md5 的方法(可能是一个错误的猜测,哈哈)。
使用分支而不是目录可以轻松解决此问题吗?如果可以,上面列出的命令的分支版本是什么?
我当前在Heroku上运行一项服务。
Heroku 的部署方式是将代码推送到 git 存储库,这会触发构建并随后触发新代码的部署。
由于这是将服务部署到 Heroku 的唯一方法,因此该 git 存储库包含大量敏感信息,例如一些配置文件中的令牌和客户端机密。因此,该存储库目前是一个私有存储库,但我想将其变成公共存储库。
通常我只是 .gitignore 配置文件并完全排除它们,但由于提交文件是将它们发送到 Heroku 的唯一方法,所以我不能这样做。
我想我可以通过创建两个分支来解决这个问题,我只需将它们推送到不同的遥控器,其中一个是前往 Heroku 的私有分支,另一个是 GitHub 上的公共分支。
在开发过程中,我会推送到私有分支,然后将这些更改(减去配置)合并到公共分支,一切都会好起来的。不幸的是,这样做会导致合并包含来自私有分支的所有历史记录,其中将包含敏感数据,因此这是不行的。
是否可以通过其他方式做到这一点?
我也愿意接受替代解决方案。
这些情况通常如何解决?
我觉得这并不是一个独特的情况。
新创建 - 通过创建一个文件夹并运行命令
git init,从顶部创建一个本地 git repo。
我在这里有一个带有2 个分支的本地 git 存储库(新创建的)。现在这些分支只是我创建的虚拟分支,对它来说没什么重要的。
$ git branch
* repo2-branch1
repo2-branch2
Run Code Online (Sandbox Code Playgroud)
我这里还有一个来自 Github的远程存储库(私有),带有一个分支“TLA1”,现在还记得我上面提到的带有这两个分支的新创建的本地存储库吗?我想要做的是加入这个“TLA1”分支与分支之一repo2-branch1-repo2-branch2在我的新创建的本地存储库正如我所提到。
假设已添加“TLA1”分支。所以当我打字时,git branch我希望它像这样。
$ git branch
* repo2-branch1
repo2-branch2
TLA1
Run Code Online (Sandbox Code Playgroud)
当然,当我git log在切换到“TLA1”时输入时,我也会有远程存储库中的提交,如您在图像中看到的那样,因为对我来说这些提交非常重要。
我做了很多研究并发现了这一点,我认为这已经是它了,因为它与我的目标相似。但是当我尝试它时,我得到一个错误。
$ git checkout -b TLA1 origin/TLA1
fatal: 'origin/TLA1' is not a commit and a branch 'TLA1' cannot be created from it
Run Code Online (Sandbox Code Playgroud)
我也没有尝试过这个,因为这件事可能会对我的远程仓库做些什么,git …
假设我有以下 git 结构:
A - B - C - D - E - F master
\_ G - H - I branch
Run Code Online (Sandbox Code Playgroud)
git checkout branch; git log 不识别分支与主分支的点。
如果我想检查此分支中的所有更改怎么办?