Helix Core is now P4. Product user interfaces will be updated soon. Learn more >>

P4 CLI Documentation | 2025.2

# Propagate changes

Streams enable you to isolate stable code from work in progress, and to work concurrently on various projects without impediment. Best practice is to periodically update less stable streams from streams that are more stable (by merging), then promote changes to the more stable stream (by copying). Merging and copying are streamlined forms of integration. In general, propagate change as follows:

- For copying and branching, use `p4 copy` or `p4 populate`.
- For merging, use `p4 merge`.
- For edge cases not addressed by `p4 merge` or `p4 copy`, use `p4 integrate`.

The preceding guidelines apply to classic P4 Server as well.

## Merge changes from a more stable stream

To update a stream with changes from a more stable stream, issue the `p4 merge -S source-stream` command, resolve as required, and submit the resulting changelist. By default, you cannot copy changes to a more stable stream until you have merged any incoming changes from the intended target. This practice ensures that you do not inadvertently overwrite any of the contents of the more stable stream.

Assuming changes have been checked into the mainline after you started working in the development stream (and assuming your workspace is set to a development stream), you can incorporate the changes into the development stream by issuing the following commands:

    p4 merge
    p4 resolve
    p4 submit -d "Merged latest changes"

## Copy changes to a more stable stream

After merging, your stream is up to date with its more stable parent or child. Assuming you’ve finalized the changes you want to make in the development stream, you can now promote its new content with no danger of overwriting work in the target stream. The copy operation simply propagates a duplicate of the source to the target, with no resolve required. For example, (and assuming your workspace is set to a mainline parent stream) to promote changes from the development stream to its parent mainline, issue the following commands:

    p4 copy --from //Acme/dev
    p4 submit -d "Check my new feature in"

## Compare changes between streams

Using the `p4 interchanges` command, you can compare changes between streams to look for outstanding merges. Suppose you have a mainline stream `//Acme/main` and its child, a development stream, `//Acme/dev`. The following command tells you which changes exist in `//Acme/dev` but not in its parent stream:

    p4 interchanges -S //Acme/dev

The following command tells you which changes exist in the parent of `//Acme/dev` but not in `//Acme/dev`:

    p4 interchanges -S -r //Acme/dev

## Propagate change across the stream hierarchy

You might need to propagate a specific change between two streams that do not have a parent-child relationship in the stream hierarchy The set of parent-to-child relationships between streams in a stream depot.. For example, to obtain an in-progress feature or bug fix from a peer development stream. To merge from or copy to such a stream, you can re-parent your stream by editing its specification and setting the `Parent` field to the desired source or target. This practice is not considered optimal but might be necessary.

Alternatively, you can use the `-P` option with the `p4 merge` command to do a one-off merge of the streams.

Your search for returned results