现状:
两名开发人员正在名为Sprint1的相同远程分支中工作:
开发人员1:更改说2个文件中的一些代码,提交(意外添加3个其他文件),然后推送到Sprint1。
开发人员2:以某种方式意识到开发人员1也偶然添加了我们不想推送的3个文件。因此,在开发人员1更改之前,他将更改反向合并到提交。
此时,开发人员1想要再次尝试提交他的两个文件(而不是他正在处理的额外3个文件)并推送到远程分支(Sprint1)。问题是pull会覆盖Developers 1本地文件,并有效地“删除”所有5个文件中的本地更改。
开发人员1获取最新版本的正确方法是什么,但是这次能够推送正确的文件而不会丢失更改?
答案 0 :(得分:1)
让开发人员1使用他当前的本地编辑创建另一个分支,然后在他的本地文件上的Sprint1分支上向他的Sprint1分支(而不是他创建的新分支)发出拉取请求。然后,他可以在他不希望在新分支中提交的三个文件上运行git rm
,然后将该分支合并回Sprint1。
答案 1 :(得分:1)
关于git的好处是完全删除你曾经提交过的smth很难。如果您不想对存储库执行强制推送以删除这些提交(原始提交和还原它的提交)并从头开始提交更改,那么Developer 1可以执行以下操作:
git pull
- 好的,我们提取还原提交并有这样的历史记录:
ca798ca revert 'commit1'
cf76cf7 commit1
好吧,我们“失去了”我们的变化,但不要担心 - 下一步将把它们带回来。
git revert -n HEAD
(或显式git revert -n ca798ca
)还原还原提交。现在,原始提交的所有更改(必要和不必要的更改)都在索引中,但尚未提交(感谢-n
选项)。
git reset HEAD
将所有更改从索引移回工作目录。
git add necessary_file && git commit -m 'necessary changes'
仅向索引添加必要的更改并提交它们。您在此提交中不想要的所有更改都将保留在您的工作目录中。
git push
与同事分享您的结果。
这些步骤是按原样提供的,所以如果您不理解上述内容,请在执行前询问。否则,事情可能会变得更加混乱。