To commit changes, start by staging the files to be included in the commit
using git_add() or git_rm(). Use git_status() to see an overview of
staged and unstaged changes, and finally git_commit() creates a new commit
with currently staged files.
git_commit_all() is a convenience function that automatically stages and
commits all modified files. Note that git_commit_all() does not add
new, untracked files to the repository. You need to make an explicit call to
git_add() to start tracking new files.
git_log() shows the most recent commits and git_ls() lists all the files
that are being tracked in the repository. git_stat_files()
Usage
git_commit(message, author = NULL, committer = NULL, repo = ".")
git_commit_all(message, author = NULL, committer = NULL, repo = ".")
git_commit_info(ref = "HEAD", repo = ".")
git_commit_id(ref = "HEAD", repo = ".")
git_commit_stats(ref = "HEAD", repo = ".")
git_commit_descendant_of(ancestor, ref = "HEAD", repo = ".")
git_add(files, force = FALSE, repo = ".")
git_rm(files, repo = ".")
git_status(staged = NULL, pathspec = NULL, repo = ".")
git_conflicts(repo = ".")
git_ls(repo = ".", ref = NULL)
git_log(ref = "HEAD", max = 100, after = NULL, repo = ".")
git_stat_files(files, ref = "HEAD", repo = ".")Arguments
- message
- a commit message 
- A git_signature value, default is - git_signature_default().
- committer
- A git_signature value, default is same as - author
- repo
- The path to the git repository. If the directory is not a repository, parent directories are considered (see git_find). To disable this search, provide the filepath protected with - I(). When using this parameter, always explicitly call by name (i.e.- repo =) because future versions of gert may have additional parameters.
- ref
- revision string with a branch/tag/commit value 
- ancestor
- a reference to a potential ancestor commit 
- files
- vector of paths relative to the git root directory. Use - "."to stage all changed files.
- force
- add files even if in gitignore 
- staged
- return only staged (TRUE) or unstaged files (FALSE). Use - NULLor- NAto show both (default).
- pathspec
- character vector with paths to match 
- max
- lookup at most latest n parent commits 
- after
- date or timestamp: only include commits starting this date 
Value
- git_status(),- git_ls(): A data frame with one row per file
- git_log(): A data frame with one row per commit
- git_commit(),- git_commit_all(): A SHA
See also
Other git:
git_archive,
git_branch(),
git_config(),
git_diff(),
git_fetch(),
git_ignore,
git_merge(),
git_rebase(),
git_remote,
git_repo,
git_reset(),
git_signature(),
git_stash,
git_tag
Examples
oldwd <- getwd()
repo <- file.path(tempdir(), "myrepo")
git_init(repo)
setwd(repo)
# Set a user if no default
if(!user_is_configured()){
  git_config_set("user.name", "Jerry")
  git_config_set("user.email", "jerry@gmail.com")
}
writeLines(letters[1:6], "alphabet.txt")
git_status()
#> # A tibble: 1 × 3
#>   file         status staged
#>   <chr>        <chr>  <lgl> 
#> 1 alphabet.txt new    FALSE 
git_add("alphabet.txt")
#> # A tibble: 1 × 3
#>   file         status staged
#>   <chr>        <chr>  <lgl> 
#> 1 alphabet.txt new    TRUE  
git_status()
#> # A tibble: 1 × 3
#>   file         status staged
#>   <chr>        <chr>  <lgl> 
#> 1 alphabet.txt new    TRUE  
git_commit("Start alphabet file")
#> [1] "79262db410d8ea4291a59cee090e07815866b64c"
git_status()
#> # A tibble: 0 × 3
#> # ℹ 3 variables: file <chr>, status <chr>, staged <lgl>
git_ls()
#> # A tibble: 1 × 4
#>   path         filesize modified            created            
#> * <chr>           <dbl> <dttm>              <dttm>             
#> 1 alphabet.txt       12 2025-10-12 06:42:55 2025-10-12 06:42:55
git_log()
#> # A tibble: 1 × 6
#>   commit                          author time                files merge message
#> * <chr>                           <chr>  <dttm>              <int> <lgl> <chr>  
#> 1 79262db410d8ea4291a59cee090e07… Jerry… 2025-10-12 06:42:55     1 FALSE "Start…
cat(letters[7:9], file = "alphabet.txt", sep = "\n", append = TRUE)
git_status()
#> # A tibble: 1 × 3
#>   file         status   staged
#>   <chr>        <chr>    <lgl> 
#> 1 alphabet.txt modified FALSE 
git_commit_all("Add more letters")
#> [1] "05c45d5cc7c0e4f981b314a92fa1e69be1625535"
# cleanup
setwd(oldwd)
unlink(repo, recursive = TRUE)
