Git merge不会添加新文件

时间:2017-02-24 10:46:03

标签: git merge

这是我的提交历史:

git checkout branchA
git merge branchB

我有一个branchA分支,我添加了一个文件。然后,我分支到branchB。由于某种原因(重构),该文件后来在branchB中被删除。我将这些更改后移到branchA中。但后来又在branchB中添加了文件。最后我将branchB合并到branchA。

declare
  type t_rid_arr is table of rowid index by pls_integer;
  type t_row_status_arr is table of eba_cm_checklist_rows.row_status%type index by pls_integer;
  type t_percent_complete_arr is table of number index by pls_integer;

  l_rid_arr t_rid_arr;
  l_row_status_arr t_row_status_arr;
  l_percent_complete_arr t_percent_complete_arr;
begin
  SELECT
    rid,
    row_status,
    eba_cm_checklist_std.get_row_percent_complete(pc.id,pc.checklist_id,pc.max_col_num) AS percent_complete
  bulk collect into 
    l_rid_arr,
    l_row_status_arr,
    l_percent_complete_arr
  FROM (
    SELECT r.rowid as rid, 
           r.*,
           count(*) over(partition by checklist_id) AS max_col_num
      FROM eba_cm_checklist_rows r
     ) pc;

  forall i in 1..l_rid_arr.count 
     update eba_cm_checklist_rows
        set row_status = case when l_percent_complete_arr(i) = 100 then 'Green' else row_status end
      where rowid = l_rid_arr(i);
end;
/

在合并期间,没有提到文件a.c.并且在branchA中合并后该文件不存在。为什么git无法在branchB中看到文件a.c被添加到AFTER(关于日期和时间)删除(在两个分支中),因此它需要保留它?至少,我想看到冲突或其他什么......

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

从评论中:

  

具体来说,三个(也只有三个)是很重要的:合并基础,   两个分支重新组合在一起的位置(这是您的底部添加新的   文件a.c commit),以及两个分支提示A和B。

而且,正如您提到的:

  

Git看到合并基础之间的文件a.c没有变化   和branchB。但是在合并基础和branchA之间,它看到一个   删除。因此结果是a.c文件被删除。

您可以在合并分支之前对两个提交使用git difftool。您将能够看到丢失的文件及其内容,并手动重新保存它们。

您还可以在两个分支上使用git diff --name-only。确定丢失的文件后,可以直接将它们从branchB检出到branchA:

git checkout branchA
git checkout branchB -- a.c