删除层次结构中的目录,同时保留git中的状态

时间:2011-09-07 14:45:46

标签: git move

我有一个像

这样的存储库
  /file1
  /file2
  /dir_a/file3
  /dir_a/file4
  ...

如何删除dir_a并将其所有内容移到一个目录(在本例中为/),同时保留所有文件的状态(未跟踪,已更改但未暂存),这可能是包含在/中,还包含在dir_a

2 个答案:

答案 0 :(得分:1)

git-mv应该能够解决这个问题。使用git mv -k dir_a/* .,将保留暂存/未暂停状态。这不会移动未跟踪的文件,因此请在之后使用mv dir_a/* .

答案 1 :(得分:0)

# shelving unstaged stuff
git stash
# moving content from /dir_a to /
# that should suffice as git doesn't track directories but only files
git status -uno -s | grep "src_dir" | awk '{print "-n " $2 " dest_dir"}' | xargs -n3 git mv -f
# than move what remains in source dir manually:
mv src_dir/* dest_dir
# resurrect unstaged changes
git stash pop

第二行可能会更好,但它对我有用。