将单个文件移出git commit并将其放在单独的git commit中

时间:2016-05-27 14:19:12

标签: git

我已经在git中提交了一定数量的文件,例如

提交1包含:

  • 文件1
  • 文件2 [更名]
  • file3的
  • file4将

现在我想将file2 [renamed]文件移动到不同的提交中,而不会打扰其他文件。有没有可能在git?

2 个答案:

答案 0 :(得分:0)

如果提交1是最后一次提交,请尝试git reset --hard HEAD,然后git add分别对file1,file3和file4进行更改。

答案 1 :(得分:0)

  1. 使用软标志重置以保持分阶段更改
  2. 单独重置重命名的文件
  3. 制作新提交
  4. 初始化存储库

    jeff ~ $ mkdir tg
    jeff ~ $ cd tg
    jeff tg $ git init
    Initialized empty Git repository in /home/administrator/tg/.git/
    jeff tg (master #) $ touch file1
    jeff tg (master #) $ touch file2a
    jeff tg (master #) $ touch file3
    jeff tg (master #) $ touch file4
    jeff tg (master #) $ git add .
    jeff tg (master #) $ git commit -m "init"
    [master (root-commit) c4668aa] init
     4 files changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 file1
     create mode 100644 file2a
     create mode 100644 file3
     create mode 100644 file4
    

    进行更改并提交1

    jeff tg (master) $ mv file2a file2
    jeff tg (master *) $ echo amendment >> file1
    jeff tg (master *) $ echo amendment >> file3
    jeff tg (master *) $ echo amendment >> file4
    jeff tg (master *) $ git add .
    jeff tg (master +) $ git status 
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   file1
            renamed:    file2a -> file2
            modified:   file3
            modified:   file4
    
    jeff tg (master +) $ git commit -m "commit 1"
    [master b84034a] commit 1
     4 files changed, 3 insertions(+)
     rename file2a => file2 (100%)
    

    软复位并取消所需的单独更改

    jeff tg (master) $ git reset --soft HEAD~
    jeff tg (master +) $ git reset -- file2a
    Unstaged changes after reset:
    D       file2a
    jeff tg (master *+) $ git status 
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   file1
            new file:   file2
            modified:   file3
            modified:   file4
    
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            deleted:    file2a
    
    jeff tg (master *+) $ git reset -- file2
    Unstaged changes after reset:
    D       file2a
    jeff tg (master *+) $ git status 
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   file1
            modified:   file3
            modified:   file4
    
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            deleted:    file2a
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
            file2
    

    使用其他更改文件进行提交(未重命名)

    jeff tg (master *+) $ git commit -m "commit 2"
    [master 2f29079] commit 2
     3 files changed, 3 insertions(+)
    

    现在添加并提交重命名的文件

    jeff tg (master *) $ git add .
    jeff tg (master +) $ git status 
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            renamed:    file2a -> file2
    
    jeff tg (master +) $ git commit -m "commit 3"
    [master e2fd651] commit 3
     1 file changed, 0 insertions(+), 0 deletions(-)
     rename file2a => file2 (100%)