我和一个大学项目的两个朋友一起工作,他们对代码进行了一些更改。 我还对代码做了很多更改,其中大部分都要保留。
我是git的新手,不知道从哪里开始。 我的朋友建议我使用:
git pull origin
当我这样做时,我得到:
error: Your local changes to the following files would be overwritten by merge:
Please, commit your changes or stash them before you can merge
我在stackoverflow上的某处读过:How do you git fetch then merge? "Error: Your local changes to the following files would be overwritten by merge"
如果我不提交对本地存储库的更改,它们会丢失吗?
由于
这就是现在的样子:
Arthur Wulf@SUPERWOLF-PC /c/Current Project/study-wise (master|MERGING)
$ git pull origin master
M .pydevproject
U src/app.yaml
M src/getters/__init__.pyc
M src/index.yaml
M src/model/ClassM.pyc
M src/model/CourseM.py
M src/model/CourseM.pyc
M src/model/GeneralM.pyc
M src/model/LectureM.py
M src/model/LectureM.pyc
M src/model/PostClassM.py
A src/model/PostClassM.pyc
M src/model/QuestionM.py
M src/model/QuestionM.pyc
M src/model/StudentM.py
M src/model/StudentM.pyc
M src/model/TopicM.py
M src/model/TopicM.pyc
M src/model/__init__.pyc
M src/setters/__init__.pyc
A src/setters/setQuestionStats.py
D src/setters/setRemoveOldData.py
A src/setters/setStartNewClass.py
A src/setters/setStudentAnswer.py
D src/setters/setTopicChanged.py
A src/setters/setUpdateTopicStats.py
M src/view/allCourses.html
M src/view/lecture.html
U src/view/prof.html
M src/view/question.html
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
我不明白的是,我如何将本地文件与在线原始存储库端的文件进行比较并合并?
答案 0 :(得分:4)
正确的做法是在本地提交所有更改,然后再尝试拉动。该错误可以防止您丢失尚未提交的本地更改。创建提交(提交)就像创建代码的新快照一样,然后安全地记录该状态。
回答你的问题:
1)你如何在当地承诺?
查看git status
的输出。如果有任何文件列为要保留在git中的“未跟踪文件”,请使用git add <filename>...
表示您希望它们在下次提交时使用。然后查看列为“未提交的更改的更改”的文件 - 这些文件已经存储在您已更改的存储库中。您可以再为这些中的每一个执行git add <filename>...
,以指示您正在准备的提交中确切地知道该文件的那个版本。 (如果对文件进行进一步修改,则必须再次git add
该文件,以便为提交暂存文件的新内容。)
最后,您应该运行git commit
。这将打开一个编辑器,您应该输入一个有用的提交消息 - 当您保存该文件并退出编辑器时,应该创建您的提交。然后,您可以按照原来的想法运行git pull origin master
。
(作为一种快捷方式,如果您执行git commit -a
,那么已经存储在存储库中的文件的所有更改都将暂存,无需您git add
。
2)如何合并更改(有没有比我更好用的方法)?
您尝试的git pull origin master
命令实际上做了两件事:
master
origin
git善于避免抱怨虚假冲突,但如果您确实需要帮助处理它们,请查看git mergetool
。
3)如何上传更改?
您可以使用git push origin master
。
答案 1 :(得分:1)
有一本很棒的在线书籍解释了git:Pro Git
所以我更喜欢教鱼而不是钓鱼
答案 2 :(得分:1)
git pull origin
pull
(fetch
+ merge
)从远程(原点)检索最新内容并将其与您的代码合并。如果您使用的分支具有未经修改的更改,则无法合并新代码。您可以使用以下方法检查分支状态:
git status
在本地提交,通常是
git add . //stage all files
git commit -a -m "local commit" //commit all staged
这是您本地仓库的本地提交。然后你可以执行pull
,它会尝试将你最近的提交与远程更改合并。
pull
就像commit
一样,pull
的事件记录在回购历史中。它将尝试合并你的分支中的文件的更改(我很少看到覆盖),但就像我说的那样,commit
,事件被记录下来,你可以恢复。
要上传更改,您可以执行push
,其中remote
是要存储在GIT中的服务器的别名,branch
是要推送的分支。
git push [remote] [branch]
看到你与GIT客户讨论@zerkms,我个人使用的是msysGit GIT for Windows。它有一个GUI和一个命令行。
答案 3 :(得分:1)
当你感觉到自己的方式时,应该避免使用git pull
,因为它同时执行fetch
(你想要的)和merge
(你可能不想要)。
您需要与朋友聊聊最适合您的工作流程 - 看一下git教程[git help tutorial
适用于Git for Windows]和gitworkflows [git help workflows
] ,当然还有Nvie's A successful Git branching model(有图片,虽然它可能比你需要的更先进)。
关键是当单独的“my_branch”,“his_branch”和“her_branch”等会给你们每个人所需的自由时,避免使用公共分支(“our_work”)进行开发黑客攻击。同时你也可以拥有“feature_1”等分支,你可以作为一个团队使用,因为这些功能会以协调的方式成熟。
此外,请注意自动推送的分支与自动提取的分支之间的区别。他们可能不是你想的那样。