协作工作流程的Git指南/教程

时间:2012-06-23 11:14:13

标签: git

  1. 我正在尝试做什么:
  2. 我和一个大学项目的两个朋友一起工作,他们对代码进行了一些更改。 我还对代码做了很多更改,其中大部分都要保留。

    我是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"

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

    1. 你如何在当地承诺?
    2. 如何合并更改(有没有比我更好用的方法)?
    3. 如何上传更改?
    4. 由于

      这就是现在的样子:

      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 个答案:

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

  1. 从名为master
  2. 的远程存储库中获取分支origin
  3. 将获取的分支的状态合并到当前分支中。
  4. git善于避免抱怨虚假冲突,但如果您确实需要帮助处理它们,请查看git mergetool

      

    3)如何上传更改?

    您可以使用git push origin master

    执行此操作

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

git pull origin

pullfetch + 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”等分支,你可以作为一个团队使用,因为这些功能会以协调的方式成熟。

此外,请注意自动推送的分支与自动提取的分支之间的区别。他们可能不是你想的那样。