暂时从Git分支中删除功能

Pau*_*ega 12 git

我们使用git来管理我们应用程序的代码库,并且遇到了我尚未遇到的情况,但我认为这种情况很常见.

我们想暂时删除一个功能,然后在将来的某个时候重新添加它.我试图想象支持这个的分支结构,或者我们应该做一些简单的事情,比如从代码中删除该功能,并在准备好重新添加它时,从提交历史中重新创建它.

在处理这种情况方面,有人能指出我正确的方向吗?

小智 8

您可以暂时删除Git仓库历史记录之前的功能的一种方法是进行删除功能的提交.然后,当您想要重新添加该功能时,只需还原将其取出的提交.这将执行反向修补,这意味着它将反向应用更改,这将有效地重新添加功能:

git revert <sha of commit that removed the feature>
Run Code Online (Sandbox Code Playgroud)

如果您希望稍后通过与同时对代码的更改保持同步来轻松地重新添加该功能,则可以在删除后立即创建单独的功能分支,然后只需处理该分支像任何其他功能分支一样,通过频繁地重新定位master(或develop分支,如果这是你想要的方式)保持同步,解决冲突.

所以基本上,你会想做这样的事情(如果你使用的是GitHub FlowGit Flow分支策略,那么两者都使用功能分支的概念,这些概念最终会被合并到一个主线中.为简单起见,我将在此示例中使用GitHub Flow:

# On master branch
git commit -m "Remove feature X" # Creates commit 1234567...

# Now make feature branch
git checkout -b saved-feature

# Immediately put the feature back in the feature branch
git revert 1234567

# When you want to sync branch with master, just use rebase.
# Rebase allows you to sync frequently, since it doesn't
# leave behind a bunch of merge commits.
#
# From the feature branch:
git rebase master # Resolve any conflicts as needed.

# N commits later, you decide it's time to merge the feature
# back in.  You can use fast-forward or non-fast-forward merge,
# it's up to you.
#
# Using fast-forward merge with master checked out (assuming
# feature branch was just rebased onto master):
git merge saved-feature

# Or forcing a merge commit, if that's what you want:
git merge --no-ff saved-feature
Run Code Online (Sandbox Code Playgroud)

假设您saved-feature经常与之保持同步master(或者develop,如果您使用的是这样),在解决冲突时,您应该没有问题合并该功能.

文件供参考: