You want to keep track of the code that you write and change but in a WordPress theme or custom plugin but you do not need to track all directories. For example, plugins written by other developers are version controlled by the WordPress plugin directory – they do not need to be committed. But bespoke themes and custom plugins do.
Here is a template .gitignore file which should help.
# This is a template .gitignore file for git-managed WordPress projects. # # Fact: you don't want WordPress core files, or your server-specific # configuration files etc., in your project's repository. You just don't. # # Solution: stick this file up your repository root (which it assumes is # also the WordPress root directory) and add exceptions for any plugins, # themes, and other directories that should be under version control. # # See the comments below for more info on how to add exceptions for your # content. Or see git's documentation for more info on .gitignore files: # http://kernel.org/pub/software/scm/git/docs/gitignore.html # Ignore everything in the root except the "wp-content" directory. /* !.gitignore !wp-content/ # Ignore everything in the "wp-content" directory, except the "plugins" # and "themes" directories. wp-content/* !wp-content/plugins/ !wp-content/themes/ # Ignore everything in the "plugins" directory, except the plugins you # specify (see the commented-out examples for hints on how to do this.) wp-content/plugins/* # !wp-content/plugins/my-single-file-plugin.php # !wp-content/plugins/my-directory-plugin/ # Ignore everything in the "themes" directory, except the themes you # specify (see the commented-out example for a hint on how to do this.) wp-content/themes/* # !wp-content/themes/my-theme/