- 我想做什么:
我和两个朋友在一个大学项目上工作,他们对代码进行了一些更改。我还对代码进行了大量更改,其中大部分我都想保留。
我是 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 然后合并? "错误:您对以下文件的本地更改将被合并覆盖"
如果我不将更改提交到本地存储库,它们就会丢失?
- 如何在本地提交?
- 如何合并更改(有没有一种方法可以超越比较)?
- 如何上传更改?
谢谢
这是它现在的样子:
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
命令实际上执行了两项操作:
- 从名为
origin
的远程存储库中获取分支master
- 将提取的分支的状态合并到当前分支中。
git 擅长避免抱怨虚假冲突,但如果您确实需要帮助处理它们,请查看git mergetool
。
3) 如何上传更改?
你可以做到这一点 git push origin master
.
有一本很棒的在线书籍可以解释 git:Pro Git
所以我更喜欢教钓鱼而不是给鱼
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,它是 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"等的分支,随着功能以协调的方式成熟,你作为一个团队使用。
此外,请注意自动推送的分支和自动获取的分支之间的区别。他们可能不是你想的那样。