Go to file
Tyler Cipriani c9d6141b2a push: check pushed ref for --force-if-includes
"--force-if-includes" ensures, "tip of the remote-tracking ref is
reachable from one of the 'reflog' entries of the local branch."

But check_if_includes_upstream() uses the local per-branch reflog based
on the destination branch rather than the branch being pushed; using
ref->name vs. ref->peer_ref->name.

For example, this command looks at the reflog for main vs. src, even
though src is being pushed:

    git push --force-if-includes --force-with-lease origin src:main

This can cause confusing rejections or unintended data loss.

False rejections: when src is up-to-date with the tip of origin's main,
but main is out-of-date or nonexistent, then the force-if-includes check
will fail, telling users the remote ref has been updated since the last
checkout.

Data loss: when src is an orphan/out-dated branch, but main is
up-to-date, then the force-if-includes check will allow the push,
clobbering the remote main.

Instead, use ref->peer_ref to locate a branch with a reflog. But if ref
does not resolve to a branch (e.g., a detached HEAD, a tag, an oid),
then we reject the push. The alternative would be to use HEAD's reflog,
which is too broad to tell us if the history being pushed includes the
tip of the remote. We need a per-branch reflog, which means that pushes
of a ref that do not resolve to a branch are rejected. Rejecting the
push of a ref like a detached HEAD already happens today (if the
same-named local branch lacks the remote tip); now the detached HEAD and
other non-branch pushes are explicitly rejected.

Allow deletions, e.g.:

    git push --force-if-includes --force-with-lease origin :main

A deletion has no source ref, so no branch reflog can be checked.
Existing tests already enforce that deletions should work with
force-if-includes.

ref->deletion is set after apply_push_cas (which triggers
check_if_includes_upstream). The ref->peer_ref name is "(delete)".
Instead check with is_null_oid to detect and allow deletion.

The early return when peer_ref is missing in check_if_includes_upstream
is necessary because apply_push_cas walks every advertised ref whenever
use_tracking_for_rest is set (i.e., a bare --force-with-lease), so
check_if_includes upstream is called for for refs that are not part of
the push.

Remove unnecessary check for empty return from get_local_ref, since it
never returns NULL for a non-empty name.

Reported-by: Stefan Haller <lists@haller-berlin.de>
Reported-by: D. Ben Knoble <ben.knoble@gmail.com>
Signed-off-by: Tyler Cipriani <tyler@tylercipriani.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2026-09-16 07:18:57 -07:00
.github ci: unify Linux images across GitLab and GitHub 2026-06-05 21:49:00 +09:00
Documentation Git 2.55 2026-06-29 07:58:39 -07:00
bin-wrappers
block-sha1
builtin Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
ci Merge branch 'ps/gitlab-ci-windows' 2026-06-22 20:05:03 -07:00
compat win32: ensure that `localtime_r()` is declared even in i686 builds 2026-06-22 06:00:30 -07:00
compiler-tricks
contrib Merge branch 'wy/docs-typofixes' 2026-06-16 09:01:03 -07:00
ewah
git-gui Merge branch 'master' of https://github.com/j6t/git-gui 2026-06-12 05:41:50 -07:00
gitk-git Merge branch 'master' of https://github.com/j6t/gitk 2026-06-12 05:41:00 -07:00
gitweb
mergetools
negotiator Merge branch 'ds/fetch-negotiation-options' 2026-05-27 14:15:45 +09:00
odb Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
oss-fuzz odb, packfile: use size_t for streaming object sizes 2026-05-09 11:25:31 +09:00
perl
po Merge branch '2.55-uk-pr' of github.com:arkid15r/git-ukrainian-l10n 2026-06-28 19:25:08 +08:00
refs Merge branch 'kn/refs-fsck-skip-lock-files' 2026-05-27 14:15:44 +09:00
reftable doc: fix typos via codespell 2026-06-08 00:21:35 +09:00
sha1
sha1collisiondetection@855827c583
sha1dc
sha256
src Enable Rust by default 2026-04-09 17:25:36 -07:00
subprojects
t push: check pushed ref for --force-if-includes 2026-09-16 07:18:57 -07:00
templates
tools Merge branch 'rs/strbuf-add-oid-hex' 2026-06-09 10:04:50 +09:00
trace2
xdiff Merge branch 'mm/diff-U-takes-no-negative-values' 2026-05-25 09:40:07 +09:00
.cirrus.yml
.clang-format
.editorconfig
.gitattributes Merge branch 'kw/gitattributes-typofix' 2026-06-21 16:41:37 -07:00
.gitignore Merge branch 'mm/git-url-parse' 2026-05-21 12:06:48 +09:00
.gitlab-ci.yml Merge branch 'ps/gitlab-ci-windows' 2026-06-22 20:05:03 -07:00
.gitmodules
.mailmap
.tsan-suppressions transport-helper: fix TSAN race in transfer_debug() 2026-06-09 14:05:42 -07:00
CODE_OF_CONDUCT.md
COPYING
Cargo.toml
GIT-BUILD-OPTIONS.in
GIT-VERSION-FILE.in
GIT-VERSION-GEN Git 2.55 2026-06-29 07:58:39 -07:00
INSTALL
LGPL-2.1
Makefile Merge branch 'js/osxkeychain-build-wo-rust' 2026-06-17 05:39:13 -07:00
README.md
RelNotes Start preparing for 2.54.1 2026-05-21 12:42:11 +09:00
SECURITY.md
abspath.c
abspath.h
aclocal.m4
add-interactive.c
add-interactive.h
add-patch.c Merge branch 'sp/add-patch-with-fewer-the-repository' 2026-04-07 14:59:26 -07:00
add-patch.h
advice.c
advice.h
alias.c alias: restore support for simple dotted aliases 2026-04-25 19:22:52 +09:00
alias.h
alloc.c
alloc.h
apply.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
apply.h apply: report input location in header parsing errors 2026-03-17 11:08:24 -07:00
archive-tar.c
archive-zip.c
archive.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
archive.h
attr.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
attr.h
banned.h
base85.c
base85.h
bisect.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
bisect.h
blame.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
blame.h
blob.c
blob.h
bloom.c Merge branch 'cf/constness-fixes' 2026-03-23 09:20:29 -07:00
bloom.h
branch.c
branch.h
build.rs
builtin.h Merge branch 'mm/git-url-parse' 2026-05-21 12:06:48 +09:00
bundle-uri.c
bundle-uri.h
bundle.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
bundle.h
cache-tree.c Merge branch 'jt/odb-transaction-write' 2026-05-27 14:15:45 +09:00
cache-tree.h
cbtree.c cbtree: allow using arbitrary wrapper structures for nodes 2026-05-15 04:50:45 +09:00
cbtree.h cbtree: allow using arbitrary wrapper structures for nodes 2026-05-15 04:50:45 +09:00
chdir-notify.c
chdir-notify.h
checkout.c
checkout.h
chunk-format.c
chunk-format.h
color.c
color.h
column.c
column.h
combine-diff.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
command-list.txt Merge branch 'mm/git-url-parse' 2026-05-21 12:06:48 +09:00
commit-graph.c Merge branch 'en/commit-graph-timestamp-fix' 2026-06-17 11:10:12 -07:00
commit-graph.h doc: fix typos via codespell 2026-06-08 00:21:35 +09:00
commit-reach.c Merge branch 'kk/commit-reach-optim' 2026-06-07 23:58:25 +09:00
commit-reach.h commit-reach: early exit paint_down_to_common for single merge-base 2026-05-12 09:33:43 +09:00
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
commit.h Merge branch 'kk/streaming-walk-pqueue' 2026-06-16 09:01:02 -07:00
common-exit.c
common-init.c
common-init.h
common-main.c
config.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
config.h Merge branch 'hn/config-typo-advice' 2026-06-15 07:41:59 -07:00
config.mak.dev Merge branch 'ps/clang-w-glibc-2.43-and-_Generic' into maint-2.54 2026-05-21 12:23:51 +09:00
config.mak.in
config.mak.uname Merge branch 'hn/macos-linker-warning' 2026-06-22 20:05:04 -07:00
configure.ac
connect.c Merge branch 'jk/connect-service-enum' 2026-06-02 16:15:28 +09:00
connect.h Merge branch 'jk/connect-service-enum' 2026-06-02 16:15:28 +09:00
connected.c Merge branch 'ed/check-connected-close-err-fd-2.53' 2026-05-31 10:00:36 +09:00
connected.h
convert.c hex: add and use strbuf_add_oid_hex() 2026-05-14 15:59:25 +09:00
convert.h
copy.c
copy.h
credential.c
credential.h
csum-file.c index-pack, unpack-objects: increase input buffer from 4 KiB to 128 KiB 2026-04-29 21:44:03 +09:00
csum-file.h docs: fix typos and grammar 2026-05-30 07:07:27 +09:00
ctype.c
daemon.c Merge branch 'st/daemon-sockaddr-fixes' 2026-06-11 04:31:17 -07:00
date.c docs: fix typos 2026-06-05 22:27:24 +09:00
date.h
decorate.c
decorate.h
delta-islands.c docs: fix typos and grammar 2026-05-30 07:07:27 +09:00
delta-islands.h
delta.h packfile,delta: drop the `cast_size_t_to_ulong()` wrappers 2026-06-15 07:45:41 -07:00
diagnose.c
diagnose.h
diff-delta.c
diff-lib.c
diff-merges.c
diff-merges.h
diff-no-index.c
diff.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
diff.h diff: reject negative values for -U/--unified 2026-05-13 10:13:26 +09:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c docs: fix typos and grammar 2026-05-30 07:07:27 +09:00
diffcore-rename.c
diffcore-rotate.c
diffcore.h line-log: route -L output through the standard diff pipeline 2026-03-16 21:05:42 -07:00
dir-iterator.c
dir-iterator.h
dir.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
dir.h ignore: note info/exclude lives in GIT_COMMON_DIR, not GIT_DIR 2026-05-13 10:25:52 +09:00
editor.c
editor.h
entry.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
entry.h
environment.c environment: move "warn_on_object_refname_ambiguity" into `struct repo_config_values` 2026-06-03 08:36:48 +09:00
environment.h Merge branch 'ob/more-repo-config-values' 2026-06-15 07:42:00 -07:00
exec-cmd.c
exec-cmd.h
fetch-negotiator.c
fetch-negotiator.h negotiator: add have_sent() interface 2026-05-20 11:33:24 +09:00
fetch-pack.c Merge branch 'ds/fetch-negotiation-options' 2026-05-27 14:15:45 +09:00
fetch-pack.h fetch: add --negotiation-include option for negotiation 2026-05-20 11:33:24 +09:00
fmt-merge-msg.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
fmt-merge-msg.h
for-each-ref.h
fsck.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
fsck.h fsck: store repository in fsck options 2026-03-23 08:33:10 -07:00
fsmonitor--daemon.h
fsmonitor-ipc.c fsmonitor: close inherited file descriptors and detach in daemon 2026-04-15 08:44:33 -07:00
fsmonitor-ipc.h
fsmonitor-ll.h
fsmonitor-path-utils.h
fsmonitor-settings.c
fsmonitor-settings.h
fsmonitor.c
fsmonitor.h
gettext.c
gettext.h
git-archimport.perl
git-compat-util.h Merge branch 'rs/use-builtin-add-overflow-explicitly-on-clang' 2026-05-27 14:15:45 +09:00
git-curl-compat.h http: add support for HTTP 429 rate limit retries 2026-03-17 09:14:19 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-filter-branch.sh
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py
git-quiltimport.sh
git-request-pull.sh
git-send-email.perl
git-sh-i18n.sh
git-sh-setup.sh
git-submodule.sh
git-svn.perl
git-web--browse.sh
git-zlib.c zlib: properly clamp to uLong 2026-06-18 09:46:56 -07:00
git-zlib.h git-zlib: handle data streams larger than 4GB 2026-05-09 11:25:31 +09:00
git.c Merge branch 'ps/setup-wo-the-repository' 2026-05-27 14:15:46 +09:00
git.rc.in
gpg-interface.c fast-import: add 'abort-if-invalid' mode to '--signed-commits=<mode>' 2026-03-26 12:42:57 -07:00
gpg-interface.h fast-import: add 'abort-if-invalid' mode to '--signed-commits=<mode>' 2026-03-26 12:42:57 -07:00
graph.c graph: add truncation mark to capped lanes 2026-03-29 21:22:09 -07:00
graph.h
grep.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
grep.h
hash-lookup.c
hash-lookup.h
hash.c object-name: simplify computing common prefixes 2026-03-20 13:16:42 -07:00
hash.h object-name: simplify computing common prefixes 2026-03-20 13:16:42 -07:00
hashmap.c
hashmap.h
help.c Merge branch 'jh/alias-i18n-fixes' into maint-2.54 2026-05-21 12:30:11 +09:00
help.h
hex-ll.c
hex-ll.h
hex.c hex: add and use strbuf_add_oid_hex() 2026-05-14 15:59:25 +09:00
hex.h hex: add and use strbuf_add_oid_hex() 2026-05-14 15:59:25 +09:00
hook.c hook: allow hook.jobs=-1 to use all available CPU cores 2026-04-10 07:58:55 -07:00
hook.h Merge branch 'ak/typofixes' 2026-06-15 07:42:00 -07:00
http-backend.c setup: stop using `the_repository` in `enter_repo()` 2026-05-19 19:36:24 +09:00
http-fetch.c setup: stop using `the_repository` in `setup_git_directory_gently()` 2026-05-19 19:36:24 +09:00
http-push.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
http-walker.c Merge branch 'ps/odb-source-loose' 2026-06-11 04:31:18 -07:00
http.c Merge branch 'js/http-https-proxy-fix' 2026-06-28 15:18:24 -07:00
http.h http: extract http_reauth_prepare() from retry paths 2026-04-16 09:15:17 -07:00
ident.c
ident.h
imap-send.c setup: stop using `the_repository` in `setup_git_directory_gently()` 2026-05-19 19:36:24 +09:00
iterator.h
json-writer.c
json-writer.h
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c Merge branch 'mm/line-log-cleanup' 2026-06-11 04:31:17 -07:00
line-log.h line-log: integrate -L output with the standard log-tree pipeline 2026-05-29 14:06:21 +09:00
line-range.c
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c setup: stop using `the_repository` in `upgrade_repository_format()` 2026-05-19 19:36:25 +09:00
list-objects-filter-options.h
list-objects-filter.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
list-objects-filter.h
list-objects.c odb: rename `odb_has_object()` flags 2026-03-31 20:43:14 -07:00
list-objects.h
list.h
lockfile.c
lockfile.h
log-tree.c line-log: integrate -L output with the standard log-tree pipeline 2026-05-29 14:06:21 +09:00
log-tree.h
loose.c loose: refactor object map to operate on `struct odb_source_loose` 2026-06-01 18:47:18 +09:00
loose.h loose: refactor object map to operate on `struct odb_source_loose` 2026-06-01 18:47:18 +09:00
ls-refs.c
ls-refs.h
mailinfo.c Merge branch 'vp/http-rate-limit-retries' 2026-04-01 10:28:18 -07:00
mailinfo.h
mailmap.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
mailmap.h
match-trees.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
match-trees.h
mem-pool.c
mem-pool.h
merge-blobs.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
merge-blobs.h odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
merge-ll.c
merge-ll.h
merge-ort-wrappers.c
merge-ort-wrappers.h
merge-ort.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
merge-ort.h
merge.c
merge.h
mergesort.h
meson.build Merge branch 'ps/odb-source-loose' 2026-06-11 04:31:18 -07:00
meson_options.txt Merge branch 'ak/typofixes' 2026-06-15 07:42:00 -07:00
midx-write.c Merge branch 'ak/typofixes' 2026-06-15 07:42:00 -07:00
midx.c repack: introduce `--write-midx=incremental` 2026-05-20 11:31:14 +09:00
midx.h repack: introduce `--write-midx=incremental` 2026-05-20 11:31:14 +09:00
name-hash.c
name-hash.h
notes-cache.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
notes-cache.h
notes-merge.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
notes-merge.h
notes-utils.c
notes-utils.h
notes.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
notes.h
object-file-convert.c
object-file-convert.h
object-file.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
object-file.h odb/source-loose: wire up `write_object_stream()` callback 2026-06-01 18:47:19 +09:00
object-name.c Merge branch 'ob/more-repo-config-values' 2026-06-15 07:42:00 -07:00
object-name.h object-name: turn INTERPRET_BRANCH_* constants into enum values 2026-03-18 12:52:29 -07:00
object.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
object.h commit-reach: deduplicate queue entries in paint_down_to_common 2026-05-26 07:17:26 +09:00
odb.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
odb.h Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
oid-array.c
oid-array.h
oidmap.c
oidmap.h
oidset.c
oidset.h
oidtree.c oidtree: add ability to store data 2026-05-15 04:50:45 +09:00
oidtree.h oidtree: add ability to store data 2026-05-15 04:50:45 +09:00
pack-bitmap-write.c pack-bitmap: build pseudo-merge bitmaps after regular bitmaps 2026-05-28 05:23:01 +09:00
pack-bitmap.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
pack-bitmap.h pack-bitmap: cache object positions during fill 2026-05-28 05:23:01 +09:00
pack-check.c packfile: widen unpack_entry()'s size out-parameter to size_t 2026-06-15 07:45:40 -07:00
pack-mtimes.c
pack-mtimes.h
pack-objects.c
pack-objects.h pack-objects: use size_t for in-core object sizes 2026-06-15 07:45:41 -07:00
pack-refs.c
pack-refs.h
pack-revindex.c Merge branch 'tb/incremental-midx-part-3.2' 2026-03-25 12:58:04 -07:00
pack-revindex.h
pack-write.c
pack.h builtin/fsck: stop using `the_repository` when checking packed objects 2026-03-23 08:33:11 -07:00
packfile.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
packfile.h Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
pager.c pager: explicitly cast away strchr() constness 2026-04-01 22:08:51 -07:00
pager.h
parallel-checkout.c
parallel-checkout.h
parse-options-cb.c
parse-options.c docs: fix typos and grammar 2026-05-30 07:07:27 +09:00
parse-options.h parse-options: clarify what "negated" means for PARSE_OPT_NONEG 2026-05-13 10:13:26 +09:00
parse.c config: add a repo_config_get_uint() helper 2026-04-10 07:58:53 -07:00
parse.h config: add a repo_config_get_uint() helper 2026-04-10 07:58:53 -07:00
patch-delta.c packfile,delta: drop the `cast_size_t_to_ulong()` wrappers 2026-06-15 07:45:41 -07:00
patch-ids.c
patch-ids.h patch-ids.h: add missing trailing parenthesis in documentation comment 2026-05-15 04:24:54 +09:00
path-walk.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
path-walk.h path-walk: support `object:type` filter 2026-05-24 18:41:07 +09:00
path.c backfill: work with prefix pathspecs 2026-03-26 09:38:06 -07:00
path.h doc: fix typos via codespell 2026-06-08 00:21:35 +09:00
pathspec.c setup: stop using `the_repository` in `prefix_path()` 2026-05-19 19:36:24 +09:00
pathspec.h
pkt-line.c
pkt-line.h pkt-line: make packet_reader.line non-const 2026-04-01 22:08:52 -07:00
preload-index.c
preload-index.h
pretty.c Merge branch 'rs/strbuf-add-oid-hex' 2026-06-09 10:04:50 +09:00
pretty.h
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c Merge branch 'th/promisor-quiet-per-repo' 2026-06-09 10:04:50 +09:00
promisor-remote.h promisor-remote: document caller filtering contract 2026-05-15 04:24:54 +09:00
prompt.c
prompt.h
protocol-caps.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
protocol-caps.h
protocol.c
protocol.h
prune-packed.c
prune-packed.h
pseudo-merge.c pack-bitmap: prevent pattern leak on pseudo-merge re-assignment 2026-05-12 10:36:18 +09:00
pseudo-merge.h
quote.c quote: simplify internals of dequoting 2026-05-19 12:14:03 +09:00
quote.h quote: drop sq_dequote_to_argv() 2026-05-19 12:14:03 +09:00
range-diff.c range-diff: drop const to fix strstr() warnings 2026-04-01 22:08:53 -07:00
range-diff.h
reachable.c
reachable.h
read-cache-ll.h
read-cache.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
read-cache.h
rebase-interactive.c
rebase-interactive.h
rebase.c
rebase.h
ref-filter.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
ref-filter.h
reflog-walk.c
reflog-walk.h
reflog.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
reflog.h
refs.c Merge branch 'ps/setup-centralize-odb-creation' 2026-06-15 07:42:00 -07:00
refs.h refs: return `ref_transaction_error` from `ref_transaction_update()` 2026-05-05 16:34:07 +09:00
refspec.c refspec: fix typo in comment 2026-03-23 21:27:17 -07:00
refspec.h
remote-curl.c Merge branch 'ps/setup-wo-the-repository' 2026-05-27 14:15:46 +09:00
remote.c push: check pushed ref for --force-if-includes 2026-09-16 07:18:57 -07:00
remote.h Merge branch 'ua/push-remote-group' 2026-06-09 10:04:50 +09:00
repack-cruft.c
repack-filtered.c
repack-geometry.c repack: introduce `--write-midx=incremental` 2026-05-20 11:31:14 +09:00
repack-midx.c repack: allow `--write-midx=incremental` without `--geometric` 2026-05-20 11:31:14 +09:00
repack-promisor.c
repack.c repack: introduce `--write-midx=incremental` 2026-05-20 11:31:14 +09:00
repack.h repack: introduce `--write-midx=incremental` 2026-05-20 11:31:14 +09:00
replace-object.c
replace-object.h
replay.c Merge branch 'kh/free-commit-list' 2026-06-07 23:58:24 +09:00
replay.h docs: fix typos 2026-06-05 22:27:24 +09:00
repo-settings.c
repo-settings.h
repository.c setup: construct object database in `apply_repository_format()` 2026-06-05 21:49:39 +09:00
repository.h repository: stop initializing the object database in `repo_set_gitdir()` 2026-06-05 21:49:38 +09:00
rerere.c Merge branch 'js/objects-larger-than-4gb-on-windows-more' 2026-06-21 16:41:38 -07:00
rerere.h
reset.c
reset.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'kk/streaming-walk-pqueue' 2026-06-16 09:01:02 -07:00
revision.h Merge branch 'kk/streaming-walk-pqueue' 2026-06-16 09:01:02 -07:00
run-command.c Merge branch 'pt/fsmonitor-linux' 2026-05-31 10:00:38 +09:00
run-command.h Merge branch 'pt/fsmonitor-linux' 2026-05-31 10:00:38 +09:00
sane-ctype.h
scalar.c setup: stop using `the_repository` in `setup_git_directory()` 2026-05-19 19:36:25 +09:00
send-pack.c Merge branch 'ds/fetch-negotiation-options' 2026-05-27 14:15:45 +09:00
send-pack.h send-pack: pass negotiation config in push 2026-05-20 11:33:24 +09:00
sequencer.c Merge branch 'rs/strbuf-add-oid-hex' 2026-06-09 10:04:50 +09:00
sequencer.h sequencer: teach autostash apply to take optional conflict marker labels 2026-04-29 21:46:03 +09:00
serve.c
serve.h
server-info.c
server-info.h
setup.c Merge branch 'ps/setup-centralize-odb-creation' 2026-06-15 07:42:00 -07:00
setup.h Merge branch 'ps/setup-centralize-odb-creation' 2026-06-15 07:42:00 -07:00
sh-i18n--envsubst.c
sha1dc_git.c
sha1dc_git.h
shallow.c Merge branch 'rs/strbuf-add-oid-hex' 2026-06-09 10:04:50 +09:00
shallow.h
shared.mak
shell.c
shortlog.h
sideband.c Merge branch 'rs/sideband-clear-line-before-print' 2026-05-19 09:57:46 +09:00
sideband.h
sigchain.c
sigchain.h
simple-ipc.h
sparse-index.c environment: move "sparse_expect_files_outside_of_patterns" into `struct repo_config_values` 2026-06-03 08:36:48 +09:00
sparse-index.h
split-index.c split-index: stop using the_repository and the_hash_algo 2026-03-19 12:01:24 -07:00
split-index.h
stable-qsort.c
statinfo.c environment: move "check_stat" into `struct repo_config_values` 2026-06-03 08:36:48 +09:00
statinfo.h
strbuf.c Merge branch 'rs/strbuf-add-uint' 2026-06-09 10:04:50 +09:00
strbuf.h strbuf: add strbuf_add_uint() 2026-05-13 00:48:42 +09:00
string-list.c hook: move unsorted_string_list_remove() to string-list.[ch] 2026-03-25 14:00:45 -07:00
string-list.h hook: move unsorted_string_list_remove() to string-list.[ch] 2026-03-25 14:00:45 -07:00
strmap.c
strmap.h
strvec.c
strvec.h
sub-process.c sub-process: use gentle handshake to avoid die() on startup failure 2026-06-02 07:48:57 +09:00
sub-process.h
submodule-config.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
submodule-config.h
submodule.c Merge branch 'ob/more-repo-config-values' 2026-06-15 07:42:00 -07:00
submodule.h
symlinks.c
symlinks.h
tag.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
tag.h
tar.h
tempfile.c builtin/maintenance: fix locking with "--detach" 2026-05-13 16:57:53 +09:00
tempfile.h builtin/maintenance: fix locking with "--detach" 2026-05-13 16:57:53 +09:00
thread-utils.c
thread-utils.h
tmp-objdir.c
tmp-objdir.h
trace.c
trace.h
trace2.c
trace2.h
trailer.c trailer: change strbuf in-place in unfold_value() 2026-05-16 22:11:07 +09:00
trailer.h
transport-helper.c Merge branch 'ps/transport-helper-tsan-fix' 2026-06-17 11:10:11 -07:00
transport-internal.h connect: use "service" enum for "name" argument 2026-05-19 15:05:46 +09:00
transport.c Merge branch 'jk/connect-service-enum' 2026-06-02 16:15:28 +09:00
transport.h Merge branch 'jk/connect-service-enum' 2026-06-02 16:15:28 +09:00
tree-diff.c
tree-walk.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
tree-walk.h docs: fix typos and grammar 2026-05-30 07:07:27 +09:00
tree.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
tree.h
unicode-width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unix-stream-server.c
unix-stream-server.h
unpack-trees.c unpack-trees: use repository from index instead of global 2026-06-09 14:25:03 -07:00
unpack-trees.h
upload-pack.c Merge branch 'ob/more-repo-config-values' 2026-06-15 07:42:00 -07:00
upload-pack.h
url.c url: return URL_SCHEME_UNKNOWN instead of dying 2026-05-06 09:48:27 +09:00
url.h url: return URL_SCHEME_UNKNOWN instead of dying 2026-05-06 09:48:27 +09:00
urlmatch.c urlmatch: define url_parse function 2026-05-06 09:48:28 +09:00
urlmatch.h urlmatch: define url_parse function 2026-05-06 09:48:28 +09:00
usage.c
userdiff.c userdiff: extend Scheme support to cover other Lisp dialects 2026-04-15 08:43:33 -07:00
userdiff.h
utf8.c
utf8.h
varint.c
varint.h
version-def.h.in
version.c
version.h
versioncmp.c
versioncmp.h
walker.c odb: rename `odb_has_object()` flags 2026-03-31 20:43:14 -07:00
walker.h
wildmatch.c
wildmatch.h
worktree.c setup: stop using `the_repository` in `upgrade_repository_format()` 2026-05-19 19:36:25 +09:00
worktree.h worktree: rename get_worktree_from_repository() 2026-05-02 07:02:45 +09:00
wrapper.c Revert "wrapper: introduce writev(3p) wrappers" 2026-04-09 14:48:09 -07:00
wrapper.h Revert "wrapper: introduce writev(3p) wrappers" 2026-04-09 14:48:09 -07:00
write-or-die.c Revert "wrapper: introduce writev(3p) wrappers" 2026-04-09 14:48:09 -07:00
write-or-die.h Revert "wrapper: introduce writev(3p) wrappers" 2026-04-09 14:48:09 -07:00
ws.c
ws.h
wt-status.c setup: stop using `the_repository` in `setup_work_tree()` 2026-05-19 19:36:24 +09:00
wt-status.h
xdiff-interface.c odb: use size_t for object_info.sizep and the size APIs 2026-06-15 07:45:41 -07:00
xdiff-interface.h checkout -m: autostash when switching branches 2026-04-29 21:46:03 +09:00

README.md

Build status

Git - fast, scalable, distributed revision control system

Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals.

Git is an Open Source project covered by the GNU General Public License version 2 (some parts of it are under different licenses, compatible with the GPLv2). It was originally written by Linus Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

Many Git online resources are accessible from https://git-scm.com/ including full documentation and Git related tools.

See Documentation/gittutorial.adoc to get started, then see Documentation/giteveryday.adoc for a useful minimum set of commands, and Documentation/git-<commandname>.adoc for documentation of each command. If git has been correctly installed, then the tutorial can also be read with man gittutorial or git help tutorial, and the documentation of each command with man git-<commandname> or git help <commandname>.

CVS users may also want to read Documentation/gitcvs-migration.adoc (man gitcvs-migration or git help cvs-migration if git is installed).

The user discussion and development of Git take place on the Git mailing list -- everyone is welcome to post bug reports, feature requests, comments and patches to git@vger.kernel.org (read Documentation/SubmittingPatches for instructions on patch submission and Documentation/CodingGuidelines).

Those wishing to help with error message, usage and informational message string translations (localization l10) should see po/README.md (a po file is a Portable Object file that holds the translations).

To subscribe to the list, send an email to git+subscribe@vger.kernel.org (see https://subspace.kernel.org/subscribing.html for details). The mailing list archives are available at https://lore.kernel.org/git/, https://marc.info/?l=git and other archival sites.

Issues which are security relevant should be disclosed privately to the Git Security mailing list git-security@googlegroups.com.

The maintainer frequently sends the "What's cooking" reports that list the current status of various development topics to the mailing list. The discussion following them give a good reference for project status, development direction and remaining tasks.

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your mood):

  • random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.
  • stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.
  • "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.
  • "goddamn idiotic truckload of sh*t": when it breaks