# `Weld.Git`
[🔗](https://github.com/nshkrdotcom/weld/blob/main/lib/weld/git.ex#L1)

Thin Git CLI wrapper used for affected-file resolution and release metadata.

# `branch_exists?`

```elixir
@spec branch_exists?(Path.t(), String.t()) :: boolean()
```

# `changed_files`

```elixir
@spec changed_files(Path.t(), String.t(), String.t()) :: [String.t()]
```

# `commit_all!`

```elixir
@spec commit_all!(Path.t(), String.t()) :: :ok
```

# `create_tag!`

```elixir
@spec create_tag!(Path.t(), String.t()) :: :ok
```

# `ensure_clean_repo!`

```elixir
@spec ensure_clean_repo!(Path.t()) :: :ok
```

# `fetch_branch!`

```elixir
@spec fetch_branch!(Path.t(), String.t(), String.t()) :: :ok
```

# `push_branch!`

```elixir
@spec push_branch!(Path.t(), String.t(), String.t()) :: :ok
```

# `push_tag!`

```elixir
@spec push_tag!(Path.t(), String.t(), String.t()) :: :ok
```

# `remote_branch_exists?`

```elixir
@spec remote_branch_exists?(Path.t(), String.t(), String.t()) :: boolean()
```

# `remote_url`

```elixir
@spec remote_url(Path.t()) :: String.t() | nil
```

# `revision`

```elixir
@spec revision(Path.t()) :: String.t() | nil
```

# `run`

```elixir
@spec run(Path.t(), [String.t()]) :: {:ok, String.t()} | {:error, String.t()}
```

# `run!`

```elixir
@spec run!(Path.t(), [String.t()]) :: String.t()
```

# `stage_all!`

```elixir
@spec stage_all!(Path.t()) :: :ok
```

# `staged_changes?`

```elixir
@spec staged_changes?(Path.t()) :: boolean()
```

# `switch_orphan!`

```elixir
@spec switch_orphan!(Path.t(), String.t()) :: :ok
```

# `worktree_add!`

```elixir
@spec worktree_add!(Path.t(), Path.t(), String.t()) :: :ok
```

# `worktree_add_detached!`

```elixir
@spec worktree_add_detached!(Path.t(), Path.t()) :: :ok
```

# `worktree_remove!`

```elixir
@spec worktree_remove!(Path.t(), Path.t()) :: :ok
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
