对于Git来说,我是一个新手,自从开始使用新客户端以来,它才使用了最近几个月(这就是在我开始为他们工作之前,他们一直在使用该软件来管理软件的版本控制)。
我最近将一个development分支与我的本地master分支合并,并推master送到服务器。在将站点推送到服务器之前,我已经在本地开发机器上测试了该站点(使用Django / Python编写的站点),并且一切似乎都正常工作(包括已在development分支上实现的错误修复)。
但是,在测试推送到服务器后所做的更改之后,我发现某些内容破坏了站点的一部分。因此,我commit在服务器上签出了一个旧版本,现在的实时版本正在使用旧版本commit,这意味着它处于“已分离头”状态,但是可以正常工作。
因此,我的本地master分支当前是我已推送到服务器的错误修复版本(该版本在本地运行,但未在服务器上运行),但是由于我需要处理网站的其他方面,因此我想恢复到master在将development分支与bug修复合并到之前所做的备份master,以便从代码的“最近工作”状态进行开发。
我在计算机上拥有的分支机构是:
master(已development合并到其中,从而破坏了其他功能)
masterBackup(即master合并之前的分支development)
development (这是修复了原始错误的分支,但现在其他问题已被打破)
masterBackup从合并development到master破产以来,实际上是我目前正在工作的“主”分支master。我想再次创建masterBackup我的“主”分支,并且master可以丢弃/删除其当前状态。我仍然有development分支机构,因此可以调查为什么/如何破坏了站点并在master重新合并之前将其修复。
我在如何从另一个分支完全替换git中的master分支时发现了问题?接受的答案表明我应该执行以下步骤:
git checkout masterBackup
git merge -s ours master
git checkout master
git merge masterBackup
Run Code Online (Sandbox Code Playgroud)
但是我找不到任何明确的命令来解释该命令的git merge -s ours功能...这肯定是如何使我 …
我运行了“ 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”,但这似乎很费劲。
有更好的解决方案吗?
我在GitHub上创建了许多存储库,但尚未将它们中的任何一个上传到Git.
在GitHub上下载我的存储库时,使用repo文件列表右上角的绿色按钮,我注意到你可以使用链接通过Git下载repo,即使我还没有将回购上传到Git .我也注意到链接看起来像这样:https://github.com/Dog-Face-Development/Bars.git并且指向一个Bars.git(或任何repo的名称)文件,我在我的文件列表中没有.
问题是:由于我可以通过Git下载我的GitHub仓库,即使我没有将仓库上传到Git,并且由于似乎有一个带.git扩展名的文件,这是否意味着我的仓库自动上传并添加没有我做任何事情的Git,然后我可以使用我的电脑和命令行Git工具承诺使用Git的回购?
所以我们的git存储库存在问题,我无法想象这是非常常见的(或者为什么有人会使用git?)
我们有一个主分支(分支A),文件已被更改.作为发布过程的一部分,我们创建了一个发布分支(分支B).没有人触及分支B中的文件,而更改是在分支A中进行的.随着发布完成(错误和什么不是),我们将分支B合并回分支A,并发现分支A中所做的所有旧更改都已丢失,并采用分支B版本(将文件恢复为合并前完成的操作)
图形化(右侧是更晚的时间)
A--ch1---*---ch2---ch3--ch4----m---
\ /
B------------------
Run Code Online (Sandbox Code Playgroud)
所以现在我们正在合并m,git默默地选择保持ch1的变化.
UPDATE
另外,我们尝试在点m处将A合并到B中,但它是相同的行为(git尝试使ch1成为最新的更改).
更新2 根据下面的torek的答案,我按照步骤发现合并基础在上图中的ch3和ch4之间.
对我来说,提出的问题多于答案,因为为什么不仅仅根据合并基础之后发生的事情应用ch4更改.
为什么它认为ch1(在我们的例子中是初始提交)应该应用于所有后续更改.
我们使用git错了吗?有什么我们想念的吗?从用户的角度来看,这对我来说毫无意义.
我们如何确保不会发生这种情况并且工作不会丢失?感谢您的任何帮助.
我正在开发一个项目,我们有一个产品,我们正在向客户销售,基本上它是相同的应用程序,只有不同的客户标识,名称和应用程序颜色和一些小的变化.
假设我们有一个创建博客文章的应用程序.我们所有的客户都使用这个应用程序,唯一的区别是所有应用程序都有自己的客户徽标和颜色架构.很难维护多个不同的项目和版本的应用程序.我的意思是,如果我们有一个新功能来实现或修复错误,复制代码并将其放入所有应用程序并编译和生成Android的APK文件并与客户共享它是很痛苦的.
当我们获得新客户时,也很难部署/创建项目.基本上我正在复制所有项目文件,重命名目录和更改包名称.我在Android项目上工作,但我们也有人在iOS上工作,这也是同样的问题.
有没有简单的方法来管理这样的项目,具有一些Android Studio功能和XCode功能?例如,此应用程序的新功能允许用户创建上传图像的帖子,因此我为一个Android应用程序编写代码并将其推送到所有应用程序,我可以轻松获取APK文件而无需打开多个Android Studio项目?
我对此感到困惑.在以下场景中,在将其推回到repo之前,您最好如何将本地功能分支添加回主分支?请注意,我没有在终端上使用git,我使用的是sourcetree,所以我对git术语不是很熟悉.
场景A:团队中没有人推动对Master的更改
Master A
\
Feature branch B - C - D
Run Code Online (Sandbox Code Playgroud)
场景B:当我在当地分支机构工作时,有人推动了改变
Master A - E
\
Feature branch B - C - D
Run Code Online (Sandbox Code Playgroud) 我在Pycharm中有一个项目,我想存储在GitLab中,以便能够在不同的机器上访问它.我试过推进版本控制,但即使它说完成并成功,也没有任何反应.
我尝试从终端设置它但我无法弄明白.
有什么帮助吗?
我正在使用Visual Studio和EF Core Power Tools对数据库中的某些模型进行反向工程。这会efpt.config.json在我的目录中创建一个,我想知道是否应该将其检查到项目的源代码管理中。
{
"ContextClassName": "MyContext",
"DefaultDacpacSchema": null,
"IdReplace": false,
"IncludeConnectionString": false,
"OutputPath": "",
"ProjectRootNamespace": "My.Name.Space",
"SelectedToBeGenerated": 0,
"Tables": [
...
],
"UseDatabaseNames": true,
"UseFluentApiOnly": true,
"UseHandleBars": false,
"UseInflector": false
}
Run Code Online (Sandbox Code Playgroud) version-control entity-framework entity-framework-core asp.net-core
我已经分叉了一个存储库,并希望在很长一段时间内对它进行维护和更改.这些更改永远不会合并回原始仓库(OR).但是,我确实希望从OR中获取任何新的更改.将这些提交添加到我的存储库时,我不想要很多合并提交; 如果有冲突,我知道他们是不可避免的.但大多数提交应该是干净的合并.
有没有办法从OR中"修改"这些提交?
我认为这git cherry-pick是一种方法,但OR会有很多变化,我不想每次都挑选.
我已经考虑过检查OR/master,在我的dev分支上重新定位它,然后ff将它合并回我的dev分支.
git checkout -b ORmaster OR/master
git rebase -i dev
git checkout dev
git merge --ff-only ORmaster
Run Code Online (Sandbox Code Playgroud)
但这意味着每次我想从OR/master合并时,我都要检查一个新的分支并重复这个.
有更简单的方法吗?
PS:我也不确定如何说出标题.如果有人能说得更好,请告诉我.
编辑:我添加了我认为我想要发生的事情.
A--B--C <-- OR/master, origin/master, master
Run Code Online (Sandbox Code Playgroud)
我添加了一些更改到我的分支
A--B--C <-- OR/master
\
D--E--F <-- master
Run Code Online (Sandbox Code Playgroud)
其他人对OR/master进行了更改.
A--B--C--G <-- OR/master
\
D--E--F <-- master
Run Code Online (Sandbox Code Playgroud)
我想要这些更改,所以我想将它们应用到我的
A--B--C--G <-- OR/master
\
D--E--F--G' <-- master
Run Code Online (Sandbox Code Playgroud)
我想进行另一次更改,有人会对OR进行更改
A--B--C--G--I <-- OR/master
\
D--E--F--G'-H <-- master
Run Code Online (Sandbox Code Playgroud)
我想将OR更改应用到我的分支.
A--B--C--G--I <-- OR/master
\
D--E--F--G'-H--I' <-- master
Run Code Online (Sandbox Code Playgroud)
据我了解,这将阻止任何合并提交,同时保持我的repo最新.
在使用git和GitHub时,如果存储库已损坏,如果我们在本地具有存储库的先前干净备份,是否可以在GitHub中使用干净版本返回?
假设我们在本地有此文件夹:/ home / toto /。
在/ home / toto /中,有工作目录和.git文件夹以及存储库。
该项目在GitHub上进行跟踪,例如在user / toto中。
在用户/ toto中,我们照常查找用户/ toto存储库的问题,拉取请求,Wiki等。
现在,如果/ home / toto /已损坏,并且已经被推送到GitHub,那么我们就有一个干净的/ home / toto /保存版本。我想我们可以这样回去:
我做了一些测试,看起来工作正常。
但!在这种情况下,我们丢失了所有问题,请求请求等......
是否可以从REST GitHub API或其他想法中保存所有这些元信息,然后再在GitHub中删除损坏的用户/ toto,然后再注入此元信息?
version-control ×10
git ×7
merge ×3
github ×2
android ×1
asp.net-core ×1
git-reset ×1
git-stage ×1
gitlab ×1
ios ×1
pycharm ×1
repository ×1