Clone & Commit via CLI

Git workflow

Cloning, editing, committing, pushing and pulling can be performed using Git directly from the command line, by using a Git client, or via the web interface. The former option is shown below. The latter option is detailed in the section Clone & Commit via Web.

The user in these examples is knut the polar bear, and its repository is examples. The repository was created via the Codeberg website, including a file.


Cloning refers to the process of creating an identical copy of an online repository to your local machine. Clone with the Git command clone followed by the repo URL.


~$ git clone
Cloning into 'examples'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), 214 bytes | 1024 bytes/s, done.


Before you are able to access Git repositories via SSH, you need to add an SSH key to your account.

Before connecting to Codeberg via SSH, please make sure that you have verified Codeberg's SSH fingerprint!

If you have set up a passphrase, you will be asked for it.

~$ git clone
Enter passphrase for key '/home/knut/.ssh/id_rsa': ****
Cloning into 'examples'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.


Modify an existing file:

~$ cd examples
~/examples$ nano

Here we use nano, but you can use any text editor you'd like.


A commit is a record of the changes to the repository. This is like a snapshot of your edits. A commit requires a commit message. For the example below, the message is "test". Keep in mind that "test" is not a very informative message, though. In the real world, make sure your commit message is informative, for you, your collaborators and anyone who might be interested in your work. Advice on how to write a good commit message can be found on countless websites and blogs.

Add a commit:

~/examples$ git commit -am 'test'
[main 10074d7] test
1 file changed, 2 insertions(+), 1 deletion(-)

Here's an explanation of the command flags used here:

  • -a: automatically stages modified and deleted files for commits.
  • -m: commit message


The last step is to synchronize (push) the commit from the local repository to the remote one on Codeberg.

If you are using HTTP, you will be asked for your Codeberg username and password. If you want to avoid entering your password every time, consider using SSH instead.

~/examples$ git push
Username for '': knut
Password for '':
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 266 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
662e04e..10074d7 main -> main


Pulling synchronizes the modifications (commit) from the remote repository on Codeberg to the local one. Pulling is important when you're working on different computers, to make sure that all computers are on the same page. It's even more important when you have collaborators on a project; they may change the files as well, so you need to pull these modifications before you start working. Because of this, it's recommended to pull before pushing.

CLI tools tea and berg for other actions

Gitea CLI tea

tea is a general CLI tool that works with all Gitea/Forgejo based instances of git. Since Codeberg is based on Forgejo, you can use tea for it. Here is a link to the project.

Codeberg CLI berg

The codeberg-cli project, aka. berg, is a CLI tool that's tailored for the use with Codeberg. The main difference compared to tea are:

  • extra features: berg provides some features that tea doesn't implement, like editing issues or pull requests
  • Rust-based: berg is written in Rust, which has stronger safety guarantees than Go which is used for tea
  • active development: the berg repository is actively developed and maintained by a few people
  • modern UI: berg offers an interactive and modern looking user experience

If you're interested, don't forget to check out the codeberg-cli wiki for detailed documentation about what it offers and how to use it.

Hey there! 👋 Thank you for reading this article!

Is there something missing, or do you have an idea on how to improve the documentation? Do you want to write your own article?

You're invited to contribute to the Codeberg Documentation at its source code repository, for example, by adding a pull request or joining in on the discussion in the issue tracker.

For an introduction on contributing to Codeberg Documentation, please have a look at the Contributor FAQ.

© Codeberg Docs Contributors. See LICENSE