什么"你正处于上午会议中#34;意思?

时间:2015-03-05 10:36:02

标签: git gerrit

当我运行git status时,这就是我所看到的:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

You are in the middle of an am session.
  (fix conflicts and then run "git am --continue")
  (use "git am --skip" to skip this patch)
  (use "git am --abort" to restore the original branch)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   xxx
    modified:   xxx
    modified:   xxx

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    xxx

no changes added to commit (use "git add" and/or "git commit -a")

$ git version
git version 1.9.1

那么,&#39;那个git试图告诉我以及解决它的正确方法是什么?

我不知道这是否相关,但我们使用并且所有更改都经过审核/审批流程。

3 个答案:

答案 0 :(得分:7)

  

解决冲突

执行git diff以查看是否有任何合并标记,例如:

$ git diff hello.txt
diff --cc hello.txt
index 5eb9649,379bd44..0000000
--- a/hello.txt
+++ b/hello.txt
@@@ -1,1 -1,1 +1,7 @@@
++<<<<<<< HEAD
 +Hello, master change.
++||||||| merged common ancestors
++Hello, Original.
++=======
+ Hello, branch b1 change.
++>>>>>>> b1

如果没有,请尝试使用-3选项重新申请git amgit am -3

如果您有,请执行,例如使用kdiff3(Windows或Linux),git mergetool --tool=kdiff3。这将启动一个图形工具,允许您在local, base and remote

之间进行选择
+--------------------------------+
| BASE   |    LOCAL     | REMOTE |
+--------------------------------+
|             MERGED             |
+--------------------------------+

http://tedfelix.com/software/git-mergetool-kdiff3.png

使用:

  • LOCAL :包含当前分支上文件内容的临时文件。
  • BASE :包含合并公共基础的临时文件。
  • REMOTE :包含要合并的文件内容的临时文件。
  • MERGED :包含冲突标记的文件。

仅当git status未报告任何未暂存的文件时,才应执行git am --continue

使用Git Conflict Resolution Ted Felix查看详情:它有这个方便的摘要:

  
      
  1. 始终将“-3”与“git am”一起使用,以确保您获得冲突标记。
  2.   
  3. 使用“git status”和“git diff”找出问题所在。
  4.   
  5. 通过以下任何方法解决冲突:      
        
    • 使用您喜欢的编辑器编辑每个冲突的文件。
    •   
    • git checkout --theirs”或“git checkout --ours”。
    •   
    • git checkout -m”可撤消特定文件的冲突解决方案。 (小心!)
    •   
    • git mergetool”和适当的合并GUI工具,例如kdiff3
    •   
  6.   
  7. git add”已解决的文件。
  8.   
  9. git am --continue”继续上午。
  10.   

使用Git 2.17(2018年第二季度),不要忘记与git am --show-current-patch开始你的git am会话,以便在发生冲突时更好地查看编辑路径。
请参阅“Show current git interactive rebase operation”。

答案 1 :(得分:1)

工作树中的某些文件已更改,并且在AM会话开始之前已提交(AM是一种从电子邮件中应用补丁的方法,其中电子邮件被拆分为更改和作者信息,然后作为补丁应用于存储库)

这与更改文件,提交文件,然后尝试根据旧版本在同一行中合并同一文件中的更改相同。 Git根本不知道哪个版本的更改有效,因此最终处于conflict状态。

这些行告诉你有冲突:

You are in the middle of an am session.
  (fix conflicts and then run "git am --continue")
  (use "git am --skip" to skip this patch)
  (use "git am --abort" to restore the original branch)

有几种方法可以解决此类冲突,所有这些冲突都是手动的。您需要一些3向合并工具(可以谷歌),它允许您比较更改并选择您想要保留的更改。 vim编辑器AFAIK嵌入了此工具,但我从未使用它。

还有一些图形工具可以帮助您解决SourceTree等软件中的冲突,但这一切都取决于存储库的位置以及那些图形工具是否可用。

UPD:您还可以通过写入消息中的git am --abort来恢复此AM会话更改。这会将分支恢复到AM会话开始之前的状态,从而有效地丢失补丁信息。

答案 2 :(得分:1)

让我们一个一个地看看它们的含义......

  

在分支主数据上你的分支在1提交之前超过'origin / master'。   (使用“git push”发布您的本地提交)

这意味着您在本地提交了一些内容但尚未与原始内容同步。

Local:您在计算机中克隆的存储库,并开始处理它。

origin:来自的主存储库,每个人都可以克隆。

  

你正处于上午会议中。 (修复冲突,然后运行   “git am --continue”)(使用“git am --skip”跳过此补丁)(使用   “git am --abort”恢复原始分支)

您正在制作补丁并且您遇到了冲突,您必须将事物恢复到原始状态(使用git am --abort)或按照以下步骤解决冲突。

  1. 输入git status
  2. 检查状态,如果您看到文件名称(both modified

  3. 打开这些文件,解决冲突,保留您想要的内容并丢弃您不想要的内容。

  4. 现在点击git add file1 file2

  5. 添加您解决冲突的文件
  6. 现在是时候继续会议了

  7. 输入git am --continue
  8. 如果您想跳过此补丁类型

    git am --skip
    
      

    你有一些变化,而你正在制作补丁   它。未提交更改的更改:(使用“git add ...”to   更新将要提交的内容)(使用“git checkout - ...”来   放弃工作目录中的更改)

    modified:   xxx
    modified:   xxx
    modified:   xxx
    
         

    未跟踪的文件:(使用“git add ...”包含将会包含的内容   提交)

    xxx
    
         

    没有更改添加到提交(使用“git add”和/或“git commit -a”)

    所以这里git试图告诉你自上次提交以来更改的文件。那些旧文件,你只是在里面改变了一些东西,它将显示为修改过的。

    您在未跟踪文件下看到的是那些之前未知的git,因为它们是新文件。

      

    解决此步骤的步骤

    1。)对于未跟踪的文件

    1.1.) git add <filename1> <filename2> and so on...
    

    2.)将添加的文件提交到存储库

    2.1)  git commit -m "Message of your choice"
    

    注意

    正如您所提到的,您正在使用审核系统(gerrit)。您可能只想将新补丁添加到现有提交而不是新提交。如果是这种情况你需要这样做

    git commit --amend
    

    3。)现在是时候推送代码了(如果你想)

    git push
    

    对于gerrit 执行此操作

    git push review