0
  1. 我正在尝试做的事情:

我和两个朋友一起做一个大学项目,他们对代码做了一些修改。我还对代码进行了很多更改,其中大部分是我想保留的。

我是 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 的某个地方读到:你如何 git fetch 然后合并?“错误:您对以下文件的本地更改将被合并覆盖”

如果我不提交对本地存储库的更改,它们会丢失吗?

  1. 你如何在本地提交?
  2. 我如何合并更改(有没有一种我可以使用的方法无法比较)?
  3. 如何上传更改?

谢谢

这就是它现在的样子:

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'.

我不明白的是,我如何将本地文件与在线原始存储库端的文件进行比较并合并它们?

4

4 回答 4

4

正确的做法是在本地提交所有更改,然后再次尝试拉取。该错误是为了保护您不会丢失尚未提交的本地更改。创建提交(committing)就像创建代码的新快照,然后安全地记录该状态。

要回答您的问题:

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命令实际上做了两件事:

  1. master从名为的远程存储库中获取分支origin
  2. 将该获取的分支的状态合并到您当前的分支中。

git 擅长避免抱怨虚假冲突,但如果您确实需要帮助处理它们,请查看git mergetool.

3) 我如何上传更改?

你可以用git push origin master.

于 2012-06-23T11:34:45.943 回答
1

有一本很棒的在线书籍可以解释 git:Pro Git

所以我更喜欢教钓鱼而不是给鱼

于 2012-06-23T11:15:58.737 回答
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被记录在回购的历史中。它会尝试合并分支中文件的更改(我很少看到覆盖),但就像我说的那样,就像 a 一样commit,事件被记录下来,你可以恢复。

要上传更改,您可以执行 a push,其中remote要推送的服务器的别名存储在您的 GIT 中,并且branch是要推送的分支。

git push [remote] [branch]

看到您已经与@zerkms与 GIT 客户端进行了讨论,我个人使用msysGit,它是适用于 Windows 的 GIT。它有一个 GUI 和一个命令行。

于 2012-06-23T11:30:30.637 回答
1

当你感觉自己的方式时,你应该避免git pull,因为它同时做 a fetch(你想要的)和 a merge(你可能不想要的)。

您将需要与您的朋友讨论最适合您的工作流程 - 查看 git 教程 [git help tutorial适用于 Windows 的 Git] 和 gitworkflows [ git help workflows],当然还有Nvie 的成功的 Git 分支模型(带图片,尽管它可能比您需要的更高级)。

关键是避免使用公共分支(“our_work”)进行开发黑客攻击,因为单独的“my_branch”、“his_branch”和“her_branch”等会给你们每个人所需的自由,同时你还可以有“feature_1”等的分支,当功能以协调的方式成熟时,您可以作为一个团队使用。

另外,要注意区分自动推送的分支和自动获取的分支。他们可能不是你想的那样。

于 2012-06-23T18:54:19.487 回答