'\" t
.\"     Title: gitfaq
.\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
.\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/>
.\"      Date: 2025-11-02
.\"    Manual: Git Manual
.\"    Source: Git 2.52.0.rc0
.\"  Language: English
.\"
.TH "GITFAQ" "7" "2025-11-02" "Git 2\&.52\&.0\&.rc0" "Git Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
gitfaq \- Frequently asked questions about using Git
.SH "SYNOPSIS"
.sp
gitfaq
.SH "DESCRIPTION"
.sp
The examples in this FAQ assume a standard POSIX shell, like \fBbash\fR or \fBdash\fR, and a user, A U Thor, who has the account \fBauthor\fR on the hosting provider \fBgit\&.example\&.org\fR\&.
.SH "CONFIGURATION"
.PP
What should I put in \fBuser\&.name\fR?
.RS 4
You should put your personal name, generally a form using a given name and family name\&. For example, the current maintainer of Git uses "Junio C Hamano"\&. This will be the name portion that is stored in every commit you make\&.
.sp
This configuration doesn\(cqt have any effect on authenticating to remote services; for that, see
\fBcredential\&.username\fR
in
\fBgit-config\fR(1)\&.
.RE
.PP
What does \fBhttp\&.postBuffer\fR really do?
.RS 4
This option changes the size of the buffer that Git uses when pushing data to a remote over HTTP or HTTPS\&. If the data is larger than this size, libcurl, which handles the HTTP support for Git, will use chunked transfer encoding since it isn\(cqt known ahead of time what the size of the pushed data will be\&.
.sp
Leaving this value at the default size is fine unless you know that either the remote server or a proxy in the middle doesn\(cqt support HTTP/1\&.1 (which introduced the chunked transfer encoding) or is known to be broken with chunked data\&. This is often (erroneously) suggested as a solution for generic push problems, but since almost every server and proxy supports at least HTTP/1\&.1, raising this value usually doesn\(cqt solve most push problems\&. A server or proxy that didn\(cqt correctly support HTTP/1\&.1 and chunked transfer encoding wouldn\(cqt be that useful on the Internet today, since it would break lots of traffic\&.
.sp
Note that increasing this value will increase the memory used on every relevant push that Git does over HTTP or HTTPS, since the entire buffer is allocated regardless of whether or not it is all used\&. Thus, it\(cqs best to leave it at the default unless you are sure you need a different value\&.
.RE
.PP
How do I configure a different editor?
.RS 4
If you haven\(cqt specified an editor specifically for Git, it will by default use the editor you\(cqve configured using the
\fBVISUAL\fR
or
\fBEDITOR\fR
environment variables, or if neither is specified, the system default (which is usually
\fBvi\fR)\&. Since some people find
\fBvi\fR
difficult to use or prefer a different editor, it may be desirable to change the editor used\&.
.sp
If you want to configure a general editor for most programs which need one, you can edit your shell configuration (e\&.g\&.,
\fB~/\&.bashrc\fR
or
\fB~/\&.zshenv\fR) to contain a line setting the
\fBEDITOR\fR
or
\fBVISUAL\fR
environment variable to an appropriate value\&. For example, if you prefer the editor
\fBnano\fR, then you could write the following:
.sp
.if n \{\
.RS 4
.\}
.nf
export VISUAL=nano
.fi
.if n \{\
.RE
.\}
.sp
If you want to configure an editor specifically for Git, you can either set the
\fBcore\&.editor\fR
configuration value or the
\fBGIT_EDITOR\fR
environment variable\&. You can see
\fBgit-var\fR(1)
for details on the order in which these options are consulted\&.
.sp
Note that in all cases, the editor value will be passed to the shell, so any arguments containing spaces should be appropriately quoted\&. Additionally, if your editor normally detaches from the terminal when invoked, you should specify it with an argument that makes it not do that, or else Git will not see any changes\&. An example of a configuration addressing both of these issues on Windows would be the configuration "C:\eProgram
\fBFiles\eVim\egvim\&.exe\fR"
\fB\-\-nofork\fR, which quotes the filename with spaces and specifies the
\fB\-\-nofork\fR
option to avoid backgrounding the process\&.
.RE
.SH "CREDENTIALS"
.PP
How do I specify my credentials when pushing over HTTP?
.RS 4
The easiest way to do this is to use a credential helper via the
\fBcredential\&.helper\fR
configuration\&. Most systems provide a standard choice to integrate with the system credential manager\&. For example, Git for Windows provides the
\fBwincred\fR
credential manager, macOS has the
\fBosxkeychain\fR
credential manager, and Unix systems with a standard desktop environment can use the
\fBlibsecret\fR
credential manager\&. All of these store credentials in an encrypted store to keep your passwords or tokens secure\&.
.sp
In addition, you can use the
\fBstore\fR
credential manager which stores in a file in your home directory, or the
\fBcache\fR
credential manager, which does not permanently store your credentials, but does prevent you from being prompted for them for a certain period of time\&.
.sp
You can also just enter your password when prompted\&. While it is possible to place the password (which must be percent\-encoded) in the URL, this is not particularly secure and can lead to accidental exposure of credentials, so it is not recommended\&.
.RE
.PP
How do I read a password or token from an environment variable?
.RS 4
The
\fBcredential\&.helper\fR
configuration option can also take an arbitrary shell command that produces the credential protocol on standard output\&. This is useful when passing credentials into a container, for example\&.
.sp
Such a shell command can be specified by starting the option value with an exclamation point\&. If your password or token were stored in the
\fBGIT_TOKEN\fR, you could run the following command to set your credential helper:
.sp
.if n \{\
.RS 4
.\}
.nf
$ git config credential\&.helper \e
        \*(Aq!f() { echo username=author; echo "password=$GIT_TOKEN"; };f\*(Aq
.fi
.if n \{\
.RE
.\}
.RE
.PP
How do I change the password or token I\(cqve saved in my credential manager?
.RS 4
Usually, if the password or token is invalid, Git will erase it and prompt for a new one\&. However, there are times when this doesn\(cqt always happen\&. To change the password or token, you can erase the existing credentials and then Git will prompt for new ones\&. To erase credentials, use a syntax like the following (substituting your username and the hostname):
.sp
.if n \{\
.RS 4
.\}
.nf
$ echo url=https://author@git\&.example\&.org | git credential reject
.fi
.if n \{\
.RE
.\}
.RE
.PP
How do I use multiple accounts with the same hosting provider using HTTP?
.RS 4
Usually the easiest way to distinguish between these accounts is to use the username in the URL\&. For example, if you have the accounts
\fBauthor\fR
and
\fBcommitter\fR
on
\fBgit\&.example\&.org\fR, you can use the URLs
\m[blue]\fBhttps://author@git\&.example\&.org/org1/project1\&.git\fR\m[]
and
\m[blue]\fBhttps://committer@git\&.example\&.org/org2/project2\&.git\fR\m[]\&. This way, when you use a credential helper, it will automatically try to look up the correct credentials for your account\&. If you already have a remote set up, you can change the URL with something like
\fBgit\fR
\fBremote\fR
\fBset\-url\fR
\fBorigin\fR
\fBhttps://author@git\&.example\&.org/org1/project1\&.git\fR
(see
\fBgit-remote\fR(1)
for details)\&.
.RE
.PP
How do I use multiple accounts with the same hosting provider using SSH?
.RS 4
With most hosting providers that support SSH, a single key pair uniquely identifies a user\&. Therefore, to use multiple accounts, it\(cqs necessary to create a key pair for each account\&. If you\(cqre using a reasonably modern OpenSSH version, you can create a new key pair with something like
\fBssh\-keygen\fR
\fB\-t\fR
\fBed25519\fR
\fB\-f\fR
\fB~/\&.ssh/id_committer\fR\&. You can then register the public key (in this case,
\fB~/\&.ssh/id_committer\&.pub\fR; note the \&.\fBpub\fR) with the hosting provider\&.
.sp
Most hosting providers use a single SSH account for pushing; that is, all users push to the
\fBgit\fR
account (e\&.g\&.,
\fBgit@git\&.example\&.org\fR)\&. If that\(cqs the case for your provider, you can set up multiple aliases in SSH to make it clear which key pair to use\&. For example, you could write something like the following in
\fB~/\&.ssh/config\fR, substituting the proper private key file:
.sp
.if n \{\
.RS 4
.\}
.nf
# This is the account for author on git\&.example\&.org\&.
Host example_author
        HostName git\&.example\&.org
        User git
        # This is the key pair registered for author with git\&.example\&.org\&.
        IdentityFile ~/\&.ssh/id_author
        IdentitiesOnly yes
# This is the account for committer on git\&.example\&.org\&.
Host example_committer
        HostName git\&.example\&.org
        User git
        # This is the key pair registered for committer with git\&.example\&.org\&.
        IdentityFile ~/\&.ssh/id_committer
        IdentitiesOnly yes
.fi
.if n \{\
.RE
.\}
.sp
Then, you can adjust your push URL to use
\fBgit@example_author\fR
or
\fBgit@example_committer\fR
instead of
\fBgit@example\&.org\fR
(e\&.g\&.,
\fBgit\fR
\fBremote\fR
\fBset\-url\fR
\fBgit@example_author:org1/project1\&.git\fR)\&.
.RE
.SH "TRANSFERS"
.PP
How do I sync a working tree across systems?
.RS 4
First, decide whether you want to do this at all\&. Git works best when you push or pull your work using the typical
\fBgit\fR
\fBpush\fR
and
\fBgit\fR
\fBfetch\fR
commands and isn\(cqt designed to share a working tree across systems\&. This is potentially risky and in some cases can cause repository corruption or data loss\&.
.sp
Usually, doing so will cause
\fBgit\fR
\fBstatus\fR
to need to re\-read every file in the working tree\&. Additionally, Git\(cqs security model does not permit sharing a working tree across untrusted users, so it is only safe to sync a working tree if it will only be used by a single user across all machines\&.
.sp
It is important not to use a cloud syncing service to sync any portion of a Git repository, since this can cause corruption, such as missing objects, changed or added files, broken refs, and a wide variety of other problems\&. These services tend to sync file by file on a continuous basis and don\(cqt understand the structure of a Git repository\&. This is especially bad if they sync the repository in the middle of it being updated, since that is very likely to cause incomplete or partial updates and therefore data loss\&.
.sp
An example of the kind of corruption that can occur is conflicts over the state of refs, such that both sides end up with different commits on a branch that the other doesn\(cqt have\&. This can result in important objects becoming unreferenced and possibly pruned by
\fBgit\fR
\fBgc\fR, causing data loss\&.
.sp
Therefore, it\(cqs better to push your work to either the other system or a central server using the normal push and pull mechanism\&. However, this doesn\(cqt always preserve important data, like stashes, so some people prefer to share a working tree across systems\&.
.sp
If you do this, the recommended approach is to use
\fBrsync\fR
\fB\-a\fR
\fB\-\-delete\-after\fR
(ideally with an encrypted connection such as with
\fBssh\fR) on the root of repository\&. You should ensure several things when you do this:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
If you have additional worktrees or a separate Git directory, they must be synced at the same time as the main working tree and repository\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
You are comfortable with the destination directory being an exact copy of the source directory,
\fIdeleting any data that is already there\fR\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
The repository (including all worktrees and the Git directory) is in a quiescent state for the duration of the transfer (that is, no operations of any sort are taking place on it, including background operations like
\fBgit\fR
\fBgc\fR
and operations invoked by your editor)\&.
.sp
Be aware that even with these recommendations, syncing in this way has some risk since it bypasses Git\(cqs normal integrity checking for repositories, so having backups is advised\&. You may also wish to do a
\fBgit\fR
\fBfsck\fR
to verify the integrity of your data on the destination system after syncing\&.
.RE
.RE
.SH "COMMON ISSUES"
.PP
I\(cqve made a mistake in the last commit\&. How do I change it?
.RS 4
You can make the appropriate change to your working tree, run
\fBgit\fR
\fBadd\fR
\fI<file>\fR
or
\fBgit\fR
\fBrm\fR
\fI<file>\fR, as appropriate, to stage it, and then
\fBgit\fR
\fBcommit\fR
\fB\-\-amend\fR\&. Your change will be included in the commit, and you\(cqll be prompted to edit the commit message again; if you wish to use the original message verbatim, you can use the
\fB\-\-no\-edit\fR
option to
\fBgit\fR
\fBcommit\fR
in addition, or just save and quit when your editor opens\&.
.RE
.PP
I\(cqve made a change with a bug and it\(cqs been included in the main branch\&. How should I undo it?
.RS 4
The usual way to deal with this is to use
\fBgit\fR
\fBrevert\fR\&. This preserves the history that the original change was made and was a valuable contribution, but also introduces a new commit that undoes those changes because the original had a problem\&. The commit message of the revert indicates the commit which was reverted and is usually edited to include an explanation as to why the revert was made\&.
.RE
.PP
How do I ignore changes to a tracked file?
.RS 4
Git doesn\(cqt provide a way to do this\&. The reason is that if Git needs to overwrite this file, such as during a checkout, it doesn\(cqt know whether the changes to the file are precious and should be kept, or whether they are irrelevant and can safely be destroyed\&. Therefore, it has to take the safe route and always preserve them\&.
.sp
It\(cqs tempting to try to use certain features of
\fBgit\fR
\fBupdate\-index\fR, namely the assume\-unchanged and skip\-worktree bits, but these don\(cqt work properly for this purpose and shouldn\(cqt be used this way\&.
.sp
If your goal is to modify a configuration file, it can often be helpful to have a file checked into the repository which is a template or set of defaults which can then be copied alongside and modified as appropriate\&. This second, modified file is usually ignored to prevent accidentally committing it\&.
.RE
.PP
I asked Git to ignore various files, yet they are still tracked
.RS 4
A
\fBgitignore\fR
file ensures that certain file(s) which are not tracked by Git remain untracked\&. However, sometimes particular file(s) may have been tracked before adding them into the \&.\fBgitignore\fR, hence they still remain tracked\&. To untrack and ignore files/patterns, use
\fBgit\fR
\fBrm\fR
\fB\-\-cached\fR
<file/pattern> and add a pattern to \&.\fBgitignore\fR
that matches the <file>\&. See
\fBgitignore\fR(5)
for details\&.
.RE
.PP
How do I know if I want to do a fetch or a pull?
.RS 4
A fetch stores a copy of the latest changes from the remote repository, without modifying the working tree or current branch\&. You can then at your leisure inspect, merge, rebase on top of, or ignore the upstream changes\&. A pull consists of a fetch followed immediately by either a merge or rebase\&. See
\fBgit-pull\fR(1)\&.
.RE
.PP
Can I use a proxy with Git?
.RS 4
Yes, Git supports the use of proxies\&. Git honors the standard
\fBhttp_proxy\fR,
\fBhttps_proxy\fR, and
\fBno_proxy\fR
environment variables commonly used on Unix, and it also can be configured with
\fBhttp\&.proxy\fR
and similar options for HTTPS (see
\fBgit-config\fR(1))\&. The
\fBhttp\&.proxy\fR
and related options can be customized on a per\-URL pattern basis\&. In addition, Git can in theory function normally with transparent proxies that exist on the network\&.
.sp
For SSH, Git can support a proxy using OpenSSH\(cqs
\fBProxyCommand\fR\&. Commonly used tools include
\fBnetcat\fR
and
\fBsocat\fR\&. However, they must be configured not to exit when seeing EOF on standard input, which usually means that
\fBnetcat\fR
will require
\fB\-q\fR
and
\fBsocat\fR
will require a timeout with something like
\fB\-t\fR
\fB10\fR\&. This is required because the way the Git SSH server knows that no more requests will be made is an EOF on standard input, but when that happens, the server may not have yet processed the final request, so dropping the connection at that point would interrupt that request\&.
.sp
An example configuration entry in
\fB~/\&.ssh/config\fR
with an HTTP proxy might look like this:
.sp
.if n \{\
.RS 4
.\}
.nf
Host git\&.example\&.org
    User git
    ProxyCommand socat \-t 10 \- PROXY:proxy\&.example\&.org:%h:%p,proxyport=8080
.fi
.if n \{\
.RE
.\}
.sp
Note that in all cases, for Git to work properly, the proxy must be completely transparent\&. The proxy cannot modify, tamper with, or buffer the connection in any way, or Git will almost certainly fail to work\&. Note that many proxies, including many TLS middleboxes, Windows antivirus and firewall programs other than Windows Defender and Windows Firewall, and filtering proxies fail to meet this standard, and as a result end up breaking Git\&. Because of the many reports of problems and their poor security history, we recommend against the use of these classes of software and devices\&.
.RE
.SH "MERGING AND REBASING"
.PP
What kinds of problems can occur when merging long\-lived branches with squash merges?
.RS 4
In general, there are a variety of problems that can occur when using squash merges to merge two branches multiple times\&. These can include seeing extra commits in
\fBgit\fR
\fBlog\fR
output, with a GUI, or when using the
\fB\&.\&.\&.\fR
notation to express a range, as well as the possibility of needing to re\-resolve conflicts again and again\&.
.sp
When Git does a normal merge between two branches, it considers exactly three points: the two branches and a third commit, called the
\fImerge base\fR, which is usually the common ancestor of the commits\&. The result of the merge is the sum of the changes between the merge base and each head\&. When you merge two branches with a regular merge commit, this results in a new commit which will end up as a merge base when they\(cqre merged again, because there is now a new common ancestor\&. Git doesn\(cqt have to consider changes that occurred before the merge base, so you don\(cqt have to re\-resolve any conflicts you resolved before\&.
.sp
When you perform a squash merge, a merge commit isn\(cqt created; instead, the changes from one side are applied as a regular commit to the other side\&. This means that the merge base for these branches won\(cqt have changed, and so when Git goes to perform its next merge, it considers all of the changes that it considered the last time plus the new changes\&. That means any conflicts may need to be re\-resolved\&. Similarly, anything using the
\fB\&.\&.\&.\fR
notation in
\fBgit\fR
\fBdiff\fR,
\fBgit\fR
\fBlog\fR, or a GUI will result in showing all of the changes since the original merge base\&.
.sp
As a consequence, if you want to merge two long\-lived branches repeatedly, it\(cqs best to always use a regular merge commit\&.
.RE
.PP
If I make a change on two branches but revert it on one, why does the merge of those branches include the change?
.RS 4
By default, when Git does a merge, it uses a strategy called the
\fBort\fR
strategy, which does a fancy three\-way merge\&. In such a case, when Git performs the merge, it considers exactly three points: the two heads and a third point, called the
\fImerge base\fR, which is usually the common ancestor of those commits\&. Git does not consider the history or the individual commits that have happened on those branches at all\&.
.sp
As a result, if both sides have a change and one side has reverted that change, the result is to include the change\&. This is because the code has changed on one side and there is no net change on the other, and in this scenario, Git adopts the change\&.
.sp
If this is a problem for you, you can do a rebase instead, rebasing the branch with the revert onto the other branch\&. A rebase in this scenario will revert the change, because a rebase applies each individual commit, including the revert\&. Note that rebases rewrite history, so you should avoid rebasing published branches unless you\(cqre sure you\(cqre comfortable with that\&. See the NOTES section in
\fBgit-rebase\fR(1)
for more details\&.
.RE
.SH "HOOKS"
.PP
How do I use hooks to prevent users from making certain changes?
.RS 4
The only safe place to make these changes is on the remote repository (i\&.e\&., the Git server), usually in the
\fBpre\-receive\fR
hook or in a continuous integration (CI) system\&. These are the locations in which policy can be enforced effectively\&.
.sp
It\(cqs common to try to use
\fBpre\-commit\fR
hooks (or, for commit messages,
\fBcommit\-msg\fR
hooks) to check these things, which is great if you\(cqre working as a solo developer and want the tooling to help you\&. However, using hooks on a developer machine is not effective as a policy control because a user can bypass these hooks with
\fB\-\-no\-verify\fR
without being noticed (among various other ways)\&. Git assumes that the user is in control of their local repositories and doesn\(cqt try to prevent this or tattle on the user\&.
.sp
In addition, some advanced users find
\fBpre\-commit\fR
hooks to be an impediment to workflows that use temporary commits to stage work in progress or that create fixup commits, so it\(cqs better to push these kinds of checks to the server anyway\&.
.RE
.SH "CROSS\-PLATFORM ISSUES"
.PP
I\(cqm on Windows and my text files are detected as binary\&.
.RS 4
Git works best when you store text files as UTF\-8\&. Many programs on Windows support UTF\-8, but some do not and only use the little\-endian UTF\-16 format, which Git detects as binary\&. If you can\(cqt use UTF\-8 with your programs, you can specify a working tree encoding that indicates which encoding your files should be checked out with, while still storing these files as UTF\-8 in the repository\&. This allows tools like
\fBgit-diff\fR(1)
to work as expected, while still allowing your tools to work\&.
.sp
To do so, you can specify a
\fBgitattributes\fR(5)
pattern with the
\fBworking\-tree\-encoding\fR
attribute\&. For example, the following pattern sets all C files to use UTF\-16LE\-BOM, which is a common encoding on Windows:
.sp
.if n \{\
.RS 4
.\}
.nf
*\&.c     working\-tree\-encoding=UTF\-16LE\-BOM
.fi
.if n \{\
.RE
.\}
.sp
You will need to run
\fBgit\fR
\fBadd\fR
\fB\-\-renormalize\fR
to have this take effect\&. Note that if you are making these changes on a project that is used across platforms, you\(cqll probably want to make it in a per\-user configuration file or in the one in
\fB$GIT_DIR/info/attributes\fR, since making it in a \&.\fBgitattributes\fR
file in the repository will apply to all users of the repository\&.
.sp
See the following entry for information about normalizing line endings as well, and see
\fBgitattributes\fR(5)
for more information about attribute files\&.
.RE
.PP
I\(cqm on Windows and git diff shows my files as having a \fB^M\fR at the end\&.
.RS 4
By default, Git expects files to be stored with Unix line endings\&. As such, the carriage return (\fB^M\fR) that is part of a Windows line ending is shown because it is considered to be trailing whitespace\&. Git defaults to showing trailing whitespace only on new lines, not existing ones\&.
.sp
You can store the files in the repository with Unix line endings and convert them automatically to your platform\(cqs line endings\&. To do that, set the configuration option
\fBcore\&.eol\fR
to
\fBnative\fR
and see
the question on recommended storage settings
for information about how to configure files as text or binary\&.
.sp
You can also control this behavior with the
\fBcore\&.whitespace\fR
setting if you don\(cqt wish to remove the carriage returns from your line endings\&.
.RE
.PP
Why do I have a file that\(cqs always modified?
.RS 4
Internally, Git always stores file names as sequences of bytes and doesn\(cqt perform any encoding or case folding\&. However, Windows and macOS by default both perform case folding on file names\&. As a result, it\(cqs possible to end up with multiple files or directories whose names differ only in case\&. Git can handle this just fine, but the file system can store only one of these files, so when Git reads the other file to see its contents, it looks modified\&.
.sp
It\(cqs best to remove one of the files such that you only have one file\&. You can do this with commands like the following (assuming two files
\fBAFile\&.txt\fR
and
\fBafile\&.txt\fR) on an otherwise clean working tree:
.sp
.if n \{\
.RS 4
.\}
.nf
$ git rm \-\-cached AFile\&.txt
$ git commit \-m \*(AqRemove files conflicting in case\*(Aq
$ git checkout \&.
.fi
.if n \{\
.RE
.\}
.sp
This avoids touching the disk, but removes the additional file\&. Your project may prefer to adopt a naming convention, such as all\-lowercase names, to avoid this problem from occurring again; such a convention can be checked using a
\fBpre\-receive\fR
hook or as part of a continuous integration (CI) system\&.
.sp
It is also possible for perpetually modified files to occur on any platform if a smudge or clean filter is in use on your system but a file was previously committed without running the smudge or clean filter\&. To fix this, run the following on an otherwise clean working tree:
.sp
.if n \{\
.RS 4
.\}
.nf
$ git add \-\-renormalize \&.
.fi
.if n \{\
.RE
.\}
.RE
.PP
What\(cqs the recommended way to store files in Git?
.RS 4
While Git can store and handle any file of any type, there are some settings that work better than others\&. In general, we recommend that text files be stored in UTF\-8 without a byte\-order mark (BOM) with LF (Unix\-style) endings\&. We also recommend the use of UTF\-8 (again, without BOM) in commit messages\&. These are the settings that work best across platforms and with tools such as
\fBgit\fR
\fBdiff\fR
and
\fBgit\fR
\fBmerge\fR\&.
.sp
Additionally, if you have a choice between storage formats that are text based or non\-text based, we recommend storing files in the text format and, if necessary, transforming them into the other format\&. For example, a text\-based SQL dump with one record per line will work much better for diffing and merging than an actual database file\&. Similarly, text\-based formats such as Markdown and AsciiDoc will work better than binary formats such as Microsoft Word and PDF\&.
.sp
Similarly, storing binary dependencies (e\&.g\&., shared libraries or JAR files) or build products in the repository is generally not recommended\&. Dependencies and build products are best stored on an artifact or package server with only references, URLs, and hashes stored in the repository\&.
.sp
We also recommend setting a
\fBgitattributes\fR(5)
file to explicitly mark which files are text and which are binary\&. If you want Git to guess, you can set the attribute
\fBtext=auto\fR\&.
.sp
With text files, Git will generally ensure that LF endings are used in the repository\&. The
\fBcore\&.autocrlf\fR
and
\fBcore\&.eol\fR
configuration variables specify what line\-ending convention is followed when any text file is checked out\&. You can also use the
\fBeol\fR
attribute (e\&.g\&.,
\fBeol=crlf\fR) to override which files get what line\-ending treatment\&.
.sp
For example, generally shell files must have LF endings and batch files must have CRLF endings, so the following might be appropriate in some projects:
.sp
.if n \{\
.RS 4
.\}
.nf
# By default, guess\&.
*       text=auto
# Mark all C files as text\&.
*\&.c     text
# Ensure all shell files have LF endings and all batch files have CRLF
# endings in the working tree and both have LF in the repo\&.
*\&.sh text eol=lf
*\&.bat text eol=crlf
# Mark all JPEG files as binary\&.
*\&.jpg   binary
.fi
.if n \{\
.RE
.\}
.sp
These settings help tools pick the right format for output such as patches and result in files being checked out in the appropriate line ending for the platform\&.
.RE
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite
