'\" 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-09-23
.\"    Manual: Git Manual
.\"    Source: Git 2.51.0.315.gbb69721404
.\"  Language: English
.\"
.TH "GITFAQ" "7" "2025-09-23" "Git 2\&.51\&.0\&.315\&.gbb6972" "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
