0
  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? 「エラー: 次のファイルへのローカルの変更は、マージによって上書きされます」

変更をローカル リポジトリにコミットしないと失われるということですか?

  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

正しいことは、すべての変更をローカルにコミットしてから、もう一度プルしてみることです。このエラーは、コミットされていないローカルの変更が失われないようにするためにあります。コミットの作成 (コミット) は、コードの新しいスナップショットを作成するようなもので、その後、その状態が安全に記録されます。

質問に答えるには:

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コマンドは、実際には次の 2 つのことを行います。

  1. masterと呼ばれるリモートリポジトリからブランチを取得しますorigin
  2. そのフェッチされたブランチの状態を現在のブランチにマージします。

git は偽りの競合について不平を言うのを避けるのに優れていますが、それらに対処するための助けが必要な場合は、git mergetool.

3) 変更をアップロードするにはどうすればよいですか?

でそれを行うことができますgit push origin master

于 2012-06-23T11:34:45.943 に答える
1

あなたが自分のやり方を感じている間は避けるgit pullべきfetchですmerge

どのワークフローがあなたに最も適しているかについて、友達と話し合う必要があります。git チュートリアル [ git help tutorialGit for Windows で動作] と gitworkflows [ git help workflows] を見てください。もちろん、Nvie の成功した Git 分岐モデル(写真付き)必要以上に高度かもしれませんが)。

「my_branch」、「his_branch」、「her_branch」などを個別に使用すると、必要な自由が得られると同時に、開発ハッキングに共通のブランチ (「our_work」) を使用しないことが重要です。機能が調整された方法で成熟するにつれて、チームとして使用する「feature_1」などのブランチを持つこともできます。

さらに、自動的にプッシュされるブランチと自動的にフェッチされるブランチの違いに注意してください。それらはおそらくあなたが考えているものではありません。

于 2012-06-23T18:54:19.487 に答える
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は のようなものです。ブランチ内のファイルの変更をマージしようとしますが (上書きはめったに見られません)、前述のように、イベントは記録され、元に戻すことができます。commitpullcommit

変更をアップロードするには、 を実行できますpush。ここで、remoteは GIT に保存されているプッシュするサーバーのエイリアスであり、プッシュbranchするブランチです。

git push [remote] [branch]

@zerkmsと GIT クライアントについて話し合ったことを見て、私は個人的に Windows 用の GIT であるmsysGitを使用しています。GUIとコマンドラインがあります。

于 2012-06-23T11:30:30.637 に答える