{"id":287,"date":"2026-10-13T09:01:51","date_gmt":"2026-10-13T09:01:51","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2010\/11\/25\/basic-perforce-command\/"},"modified":"2026-10-13T09:01:51","modified_gmt":"2026-10-13T09:01:51","slug":"basic-perforce-command","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/basic-perforce-command\/","title":{"rendered":"Perforce P4 Command Reference: Core CLI Commands, Workflow, and Examples"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Perforce (Helix Core) has a broad command-line interface, and this guide is for engineers who need a fast, reliable command reference while working. It covers the core workflow, what key commands are used for, and a cleaned command list preserved from the original post.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2010-11-25; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This revision is based on the original post, <a href=\"https:\/\/www.devopsschool.com\/blog\/basic-perforce-command\/\">Basic Perforce Command \u2013 P4 Command Reference<\/a>, with improved structure and practical examples.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2010\/11\/perforce-command.png\" alt=\"Perforce command reference from original article\" \/><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Perforce command workflow at a glance<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the typical lifecycle for a basic P4 change: authenticate, sync, open files for change, resolve when needed, and submit.<\/p>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Set P4PORT P4USER P4CLIENT] --> B[p4 login]\n    B --> C[p4 sync]\n    C --> D[Open files for add delete integrate]\n    D --> E[p4 resolve]\n    E --> F{Conflicts left}\n    F -- yes --> E2[Resolve again]\n    E2 --> F\n    F -- no --> G[p4 submit]\n    G --> H[Changelist stored in depot]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Quick start: connect and verify your workspace<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before editing or submitting, verify server connection, identity, and workspace context.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\"><span class=\"hljs-keyword\">export<\/span> P4PORT=perforce.example.com:<span class=\"hljs-number\">1666<\/span>\n<span class=\"hljs-keyword\">export<\/span> P4USER=alice\n<span class=\"hljs-keyword\">export<\/span> P4CLIENT=alice_ws\n\np4 login\np4 info\np4 clients\np4 sync <span class=\"hljs-comment\">\/\/depot\/main\/...<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Command comparison for everyday work<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use this quick comparison when deciding which command to run next.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Task<\/th><th>Primary command<\/th><th>What it does<\/th><th>Typical follow-up<\/th><\/tr><\/thead><tbody><tr><td>Bring workspace up to date<\/td><td>p4 sync<\/td><td>Copies files from depot to workspace<\/td><td>p4 have, then edit\/add\/delete<\/td><\/tr><tr><td>Start a new file<\/td><td>p4 add<\/td><td>Opens file for addition to depot<\/td><td>p4 change, p4 submit<\/td><\/tr><tr><td>Remove a tracked file<\/td><td>p4 delete<\/td><td>Opens file for deletion from depot<\/td><td>p4 submit<\/td><\/tr><tr><td>Merge or branch work<\/td><td>p4 integrate<\/td><td>Opens files for branching or merging<\/td><td>p4 resolve, p4 submit<\/td><\/tr><tr><td>Handle merge conflicts<\/td><td>p4 resolve<\/td><td>Resolves differences between revisions<\/td><td>p4 submit<\/td><\/tr><tr><td>Undo local pending changes<\/td><td>p4 revert<\/td><td>Discards changes to opened files<\/td><td>p4 sync if needed<\/td><\/tr><tr><td>Publish pending work<\/td><td>p4 submit<\/td><td>Sends open file changes to depot<\/td><td>p4 changelists, p4 describe<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Example: create and submit a basic changelist<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This example shows a small add\/delete change and submission through a numbered changelist.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\">p4 sync <span class=\"hljs-comment\">\/\/depot\/main\/...<\/span>\n\np4 add docs\/release-notes.txt\np4 delete config\/old.properties\n\np4 change\n<span class=\"hljs-comment\"># Note the changelist number created in the editor<\/span>\n\np4 submit -c <span class=\"hljs-number\">12345<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Example: integrate and resolve<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript language-bash\">p4 integrate <span class=\"hljs-comment\">\/\/depot\/release\/... \/\/depot\/main\/...<\/span>\np4 resolve\np4 submit<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Basic P4 command reference<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The table below preserves the original command coverage and descriptions, cleaned for readability.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Command<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>p4 add<\/td><td>Open file(s) in a client workspace for addition to the depot.<\/td><\/tr><tr><td>p4 admin<\/td><td>Perform administrative operations on the server.<\/td><\/tr><tr><td>p4 branch<\/td><td>Create or edit a branch specification and its view.<\/td><\/tr><tr><td>p4 change<\/td><td>Create or edit a changelist specification.<\/td><\/tr><tr><td>p4 changelists<\/td><td>List submitted and pending changelists.<\/td><\/tr><tr><td>p4 changelist<\/td><td>Create or edit a changelist specification.<\/td><\/tr><tr><td>p4 client<\/td><td>Create or edit a client workspace specification and its view.<\/td><\/tr><tr><td>p4 clients<\/td><td>List all client workspaces currently known to the system.<\/td><\/tr><tr><td>p4 delete<\/td><td>Open file(s) in a client workspace for deletion from the depot.<\/td><\/tr><tr><td>p4 depot<\/td><td>Create or edit a depot specification.<\/td><\/tr><tr><td>p4 depots<\/td><td>Display a list of depots known to the Perforce server.<\/td><\/tr><tr><td>p4 describe<\/td><td>Provides information about changelists and the changelists&#8217; files.<\/td><\/tr><tr><td>p4 groups<\/td><td>List groups of users.<\/td><\/tr><tr><td>p4 group<\/td><td>Add or delete users from a group, or set maxresults, maxscanrows, and timeout limits for members of a group.<\/td><\/tr><tr><td>p4 have<\/td><td>List files and revisions that have been synced to the client workspace.<\/td><\/tr><tr><td>p4 info<\/td><td>Display information about the current client and server.<\/td><\/tr><tr><td>p4 integrate<\/td><td>Open files for branching or merging.<\/td><\/tr><tr><td>p4 integrated<\/td><td>Show integrations that have been submitted.<\/td><\/tr><tr><td>p4 job<\/td><td>Create or edit a defect, enhancement request, or other job specification.<\/td><\/tr><tr><td>p4 jobs<\/td><td>List jobs known to the Perforce server.<\/td><\/tr><tr><td>p4 label<\/td><td>Create or edit a label specification and its view.<\/td><\/tr><tr><td>p4 labels<\/td><td>Display list of defined labels.<\/td><\/tr><tr><td>p4 lock<\/td><td>Lock an opened file against changelist submission.<\/td><\/tr><tr><td>p4 login<\/td><td>Log in to a Perforce server by obtaining a ticket.<\/td><\/tr><tr><td>p4 logout<\/td><td>Log out of a Perforce server by removing or invalidating a ticket.<\/td><\/tr><tr><td>p4 passwd<\/td><td>Change a user&#8217;s Perforce password on the server.<\/td><\/tr><tr><td>p4 rename<\/td><td>Renaming files under Perforce.<\/td><\/tr><tr><td>p4 resolve<\/td><td>Resolve conflicts between file revisions.<\/td><\/tr><tr><td>p4 revert<\/td><td>Discard changes made to open files.<\/td><\/tr><tr><td>p4 set<\/td><td>Set Perforce variables in the Windows registry.<\/td><\/tr><tr><td>p4 submit<\/td><td>Send changes made to open files to the depot.<\/td><\/tr><tr><td>p4 sync<\/td><td>Copy files from the depot into the workspace.<\/td><\/tr><tr><td>p4 tag<\/td><td>Tag files with a label.<\/td><\/tr><tr><td>p4 triggers<\/td><td>Edit scripts that run conditionally for submits, form updates, or external authentication integration.<\/td><\/tr><tr><td>p4 user<\/td><td>Create or edit Perforce user specifications and preferences.<\/td><\/tr><tr><td>p4 users<\/td><td>Print a list of all known users of the current server.<\/td><\/tr><tr><td>p4 verify<\/td><td>Verify that server archives are intact.<\/td><\/tr><tr><td>p4 workspace<\/td><td>Create or edit a client workspace specification and its view.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices and common pitfalls<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Run <strong>p4 info<\/strong> before major operations to confirm server, user, and workspace context.<\/li><li>Use numbered changelists for anything non-trivial so you can track and review changes cleanly.<\/li><li>Sync before integrate\/resolve cycles to reduce avoidable conflicts.<\/li><li>Use <strong>p4 have<\/strong> when troubleshooting version drift between local files and depot state.<\/li><li>Treat admin-level commands (<strong>p4 admin<\/strong>, <strong>p4 verify<\/strong>, <strong>p4 triggers<\/strong>) as controlled operations.<\/li><li>When uncertain about syntax on your server version, check <strong>p4 help &lt;command&gt;<\/strong>.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A cleaned, structured reference of basic Perforce (P4) commands for daily Helix Core work. Includes a workflow diagram, command comparisons, and practical CLI examples.<\/p>\n","protected":false},"author":1,"featured_media":4350,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[370],"tags":[1707,4073,333,4076,4075,4079,373,4078,4077,3207,4074],"class_list":["post-287","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-perforce","tag-basic","tag-basic-perforce-command","tag-command","tag-list-of-perforce-commands","tag-p4-command","tag-p4-command-cheatsheet","tag-perforce","tag-perforce-command-cheat-sheet","tag-perforce-command-guide","tag-perforce-command-reference","tag-perforce-commands"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/287","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=287"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/287\/revisions"}],"predecessor-version":[{"id":79124,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/287\/revisions\/79124"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4350"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}