|  |  | 
|  | # Upload changes from multiple repositories | 
|  |  | 
|  | Certain changes require modifying more than one repository simultaneously.  There are two | 
|  | supported methods for accomplishing this: soft and hard transitions. | 
|  |  | 
|  | In general, prefer soft transitions over hard transitions (see | 
|  | [Making changes across multiple petals](working_across_petals.md#hard-and-soft-transitions) for | 
|  | further details). This means that if a change to one repository depends on a change in another | 
|  | repository, you must wait until the respective commit has been rolled before the dependent commit | 
|  | can be submitted to the queue. | 
|  |  | 
|  | Most multi-Petal changes (including | 
|  | [updates to FIDL protocols](workflow_tips_and_faq.md#q_how_do_i_update_a_fidl_protocol)) should | 
|  | be attempted using a soft transition, whereas coordinating | 
|  | [changes across multiple Petals](workflow_tips_and_faq.md#q_how_do_i_coordinate_changes_across_multiple_petals) | 
|  | *may* require a hard transition.  Typically, one should use the techniques described in the above | 
|  | references to avoid hard transitions wherever possible. | 
|  |  | 
|  |  | 
|  | ## Using jiri upload {#using-jiri-upload} | 
|  |  | 
|  | To upload changes together, you need to create a branch with same name on all repositories. | 
|  |  | 
|  | Do the following: | 
|  |  | 
|  | 1.  Make and commit the first change in a Fuchsia repository: | 
|  |  | 
|  | 1.  Go to the repository: | 
|  |  | 
|  | ``` | 
|  | cd examples/fortune | 
|  | ``` | 
|  | 1.  Create a new branch; for example, *add_my_new_feature*: | 
|  |  | 
|  | ``` | 
|  | git checkout -b add_my_new_feature | 
|  | ``` | 
|  | 1.  Edit and add the files related to the feature: | 
|  |  | 
|  | ``` | 
|  | git add <my_feature_related_files> | 
|  | ``` | 
|  | 1.  Commit your first change: | 
|  |  | 
|  | ``` | 
|  | git commit | 
|  | ``` | 
|  |  | 
|  | 1.  Make and commit the second change in another Fuchsia repository: | 
|  |  | 
|  | 1.  Go to the second repository: | 
|  |  | 
|  | ``` | 
|  | cd fuchsia/build | 
|  | ``` | 
|  | 1.  Create a new branch with the same name, *add_my_new_feature*: | 
|  |  | 
|  | ``` | 
|  | git checkout -b add_my_new_feature | 
|  | ``` | 
|  |  | 
|  | 1.  Edit and add the files related to the feature: | 
|  |  | 
|  | ``` | 
|  | git add <more_of_my_feature_related_files> | 
|  | ``` | 
|  | 1.  Commit your second change: | 
|  |  | 
|  | ``` | 
|  | git commit | 
|  | ``` | 
|  |  | 
|  | 1.  Use `-multipart` to upload all changes with the same branch name across repos: | 
|  |  | 
|  | ``` | 
|  | jiri upload -multipart | 
|  | ``` | 
|  |  | 
|  | After the changes are submitted, clean up the local branches: | 
|  |  | 
|  | ``` | 
|  | cd examples/fortune | 
|  | git branch -d add_my_new_feature | 
|  | ``` | 
|  | And | 
|  |  | 
|  | ``` | 
|  | cd fuchsia/build | 
|  | git branch -d add_my_new_feature | 
|  | ``` | 
|  |  | 
|  | ## Using Git command | 
|  |  | 
|  | You can also use the `git` command to upload all changes across repositories. | 
|  | The steps are identical as the steps in [Using jiri | 
|  | upload](#using-jiri-upload); however, instead of `jiri upload -multipart` in Step 3, use the | 
|  | following `git` command to upload your changes from each repository you have modified: | 
|  |  | 
|  | ``` | 
|  | git push origin HEAD:refs/for/main | 
|  | ``` | 
|  |  | 
|  | Note that this command must be run from the working directory of each repository. | 
|  |  | 
|  |  |