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


  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

我在堆栈溢出的某处读到:你如何 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'.

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

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

要回答您的问题:

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. 从名为 origin 的远程存储库中获取分支master
  2. 将提取的分支的状态合并到当前分支中。

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

3) 如何上传更改?

你可以做到这一点 git push origin master .

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

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

git pull origin

pullfetch + merge ) 从远程(源)检索最新的信息并将其与您的代码合并。如果您工作的分支具有未提交的更改,则无法合并新代码。您可以使用以下命令检查分支状态:

git status

在本地提交,通常我会这样做

git add .                          //stage all files
git commit -a -m "local commit"    //commit all staged

这是对本地存储库的本地提交。然后,您可以执行pull,这将尝试将最近的提交与远程更改合并。

从某种意义上说,pull就像一个commitpull的事件记录在回购的历史记录中。它将尝试合并分支中文件的更改(我很少看到覆盖),但就像我说的,就像commit一样,事件被记录下来,您可以恢复。

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

git push [remote] [branch]

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

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

你需要和你的朋友聊聊什么工作流程最适合你 - 看看 git 教程 [ git help tutorial适用于 Git for Windows] 和 gitworkflow [ git help workflows ],当然还有 Nvie 一个成功的 Git 分支模型(有图片,尽管它可能比你需要的更高级)。

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

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