2016-08-16 3 views
0

私はGITを使いこなし、多くのことを試した後にこれを投稿します。gitの新機能:git pushエラーを表示する

問題は単純です:私は「試験」と言う他の枝にも存在しているマスターの「A」と言うファイルをしました。両方のファイルに変更があり、変更をマージしようとしました

コミュニティが私を導くことができる以前の投稿が多すぎますが、解決できない特定の問題があります。

ので、ここである事の事私が試してみた

  1. 私の現在のブランチは、私は変更をマージしたことbranch.Nowからの変化を示しているブランチ「試験」と(gitのディレクトリ内の)ローカルシステム上のファイルでありますマスターからgit checkoutコマンドを使用してマスターに切り替えました
  2. git pull origin masterとGit merを使用しました私はmasterから 'test'ブランチへの変更をマージする必要があります。しようとするには、どちらのコマンドでは、ファイル「A」で競合があることを示しています
  3. はその後、これらのエラーを検索する(エラーの例。マージが原因でマージされていないファイルのことはできませんが、自動マージが....など失敗した)、それが示唆されました私は簡単にマスターでのGithub(リポジトリ)に現在の変更をコピーすることができ

    :私は手動で今ここで

私の質問が来るkdiffなどのようないくつかのツールを使用してファイルをマージするためにした投稿の数によって、 gitローカルリポジトリのファイルをブランチして更新します(バージョンはBranch 'test')。私の質問は:どのようにgitは、マージが完了したことを知っている?私もそれをして、もう一度コマンド 'git push origin master'を実行しましたが、かなり分かりやすく言うと、現在のブランチの先端は....などです。

私のローカルgitリポジトリ(手動で変更をコピーした後で)git push -f origin masterを使用して強制的に更新を行うことができました(私は知っています、そのような変更をマージするのが好ましい方法ではありません)。このコマンドは正常に実行されましたが、 'git checkout master'を実行すると、ファイル 'A'がマージする必要があるという別のエラーがスローされました。まず、現在のインデックスを解決する必要があります。

これは私に、マージが起こっていることを知らないと思って、手動で変更をマージしたことをgitがどのように知っているのかを私に伝えます。

別のことは、私は何とか知っている、私は地元のGitリポジトリ(ブランチテストに属している)と現在のリポジトリのmasterにあるバージョンとを比較したいと思います。 質問:どのように比較するために両方のファイルをローカルに並べてもらえますか?私はそれがのいずれかになります知っている

私はローカルマシンで実行し、現在のファイルであるGITもそのマージを知っているように、それはいくつかの方法で行われるべきである知っているがマージされた変更内容を更新したと準備が

を習得するためにプッシュします愚かな事私は

を検索するたくさんの後に何かを見つけることができ欠落しているが、真剣にいないよ============================= =================

編集:数人のメンバーからの質問に感謝!

[email protected] MINGW64 /d/GitAll/LearnGit (newGitBranch) 
 
$ git checkout master 
 
Switched to branch 'master' 
 
Your branch is ahead of 'origin/master' by 1 commit. 
 
(use "git push" to publish your local commits) 
 
  
 

 
[email protected] MINGW64 /d/GitAll/LearnGit (master) 
 
$ git pull origin master 
 
remote: Counting objects: 3, done. 
 
remote: Compressing objects: 100% (2/2), done. 
 
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 
 
Unpacking objects: 100% (3/3), done. 
 
From https://github.com/apexkeen/LearnGit 
 
* branch master -> FETCH_HEAD 
 
8682a7a..bed8390 master -> origin/master 
 
Auto-merging Readme.txt 
 
CONFLICT (content): Merge conflict in Readme.txt 
 
Automatic merge failed; fix conflicts and then commit the result. 
 
  
 
[email protected] MINGW64 /d/GitAll/LearnGit (master|MERGING) 
 
$ git merge newGitBranch 
 
error: merge is not possible because you have unmerged files. 
 
hint: Fix them up in the work tree, and then use 'git add/rm <file>' 
 
hint: as appropriate to mark resolution and make a commit. 
 
fatal: Exiting because of an unresolved conflict. 
 
  
 
[email protected] MINGW64 /d/GitAll/LearnGit (master|MERGING) 
 
$ git config --global --edit 
 
  
 

 
  
 
[email protected] MINGW64 /d/GitAll/LearnGit (master|MERGING) 
 
$ git push origin master 
 
To https://github.com/apexkeen/LearnGit.git 
 
! [rejected] master -> master (non-fast-forward) 
 
error: failed to push some refs to 'https://github.com/apexkeen/LearnGit.git' 
 
hint: Updates were rejected because the tip of your current branch is behind 
 
hint: its remote counterpart. Integrate the remote changes (e.g. 
 
hint: 'git pull ...') before pushing again. 
 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 
 
  
 
[email protected] MINGW64 /d/GitAll/LearnGit (master|MERGING) 
 
$ git push -f origin master 
 
Total 0 (delta 0), reused 0 (delta 0) 
 
To https://github.com/apexkeen/LearnGit.git 
 
+ bed8390...674678e master -> master (forced update) 
 
  
 
[email protected] MINGW64 /d/GitAll/LearnGit (master|MERGING) 
 
$ git checkout master 
 
Readme.txt: needs merge 
 
error: you need to resolve your current index first

+2

代わりに実際の 'git'コマンドラインと' git'出力を与えることができますか? – AnoE

+0

初心者にとって大きな障害と思われる事の一つは、あなたの状況分析が間違っていることが多いことです。実際には、それは最初の場所で何が混乱していても、通常はどのようになっていますか?これは、実質的にすべての質問、特に初心者のために実行した実際のソースコードやコマンドを見ることを主張する理由です。 –

答えて

1

gitが発生したことを通知するときに競合を解決する必要があります。この時点で

[email protected] MINGW64 /d/GitAll/LearnGit (master) 
$ git pull origin master 
remote: Counting objects: 3, done. 
remote: Compressing objects: 100% (2/2), done. 
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 
Unpacking objects: 100% (3/3), done. 
From https://github.com/apexkeen/LearnGit 
* branch master -> FETCH_HEAD 
8682a7a..bed8390 master -> origin/master 
Auto-merging Readme.txt 
CONFLICT (content): Merge conflict in Readme.txt 
Automatic merge failed; fix conflicts and then commit the result. 

、あなたはreadmeファイルの競合を解決するためにgit mergetoolを実行する必要があります。ファイルが必要な状態になったら、git commitを実行して、コミットメッセージにマージと競合に関する情報をあらかじめ入力します。その時点で、git pushの原点の変更が可能になります。

これは、最初に矛盾を解決する必要があるため(出力に記載されているコマンドのように)、間違ったところで他のことをやろうとしました。

その後、-fフラグを付けてgit pushを使用したため、リモートからの変更が失われました。これは、学習環境以外では避けるべきことです。

いつでもあなたの作業コピーで何が起こっているかを見るには、git statusを大いに活用する価値があります。

+0

ああ...私が見逃した重要なことです。 。合併後、私はgit commitをするのを忘れていた。これはあらゆる種類の問題を作り出していた。私は答えられていないことがまだありますが、まだこの答えに印をつけています。ありがとう! –

1
  1. テストブランチにコードをコミットします。
  2. マスターにチェックアウトし、git pull origin masterを実行します。マスターがリポジトリで最新の状態になっていることを確認してください。
  3. チェックアウトしてブランチをテストし、リベースします。
  4. git rebase master、それ以外の場合は紛らわしいことができない場合は、手作業で特定のファイルの競合を解消してください。
  5. その後、git rebaseを実行してください。--continue
  6. その後、git addを実行してください。 & git commit。
  7. あなたはすべてマスターとテストブランチからのすべての変更を行います。
+0

番号6はどこで起こりますか?あなたがrebaseするときコミットする必要はありません? – rubenvb

+0

すべての競合が解消された場合 –

+0

通常、git addを実行します。 git rebase - 続けてください。いいえ、その流れでgit commitをしたいと思っています... – rubenvb