|
|
(2 intermediate revisions by the same user not shown) |
Line 499: |
Line 499: |
| == Merging == | | == Merging == |
| These steps show how to merge when files are modified in 2 repositories. | | These steps show how to merge when files are modified in 2 repositories. |
| + | This steps assumes the committed, but not pushed changes to learningGit that was done in the [[Using_Git_Example#Diff_against_an_Old_Version|Diff against an Old Version]] section. |
| + | |
| | | |
| {| style="width: 1200px" border="1" | | {| style="width: 1200px" border="1" |
Line 575: |
Line 577: |
| git log | | git log |
| |[[Image:GitMerge4.png]] | | |[[Image:GitMerge4.png]] |
| + | |} |
| + | |
| + | |
| + | == Undoing Commits == |
| + | These steps show how to undo commits, by using revert. It creates a new commit that undoes the specified commit. |
| + | |
| + | |
| + | {| style="width: 1200px" border="1" |
| + | |valign="top"| |
| + | === Make updates to learningGit === |
| + | These steps make updates to README.txt in learningGit. |
| + | |
| + | # Make update to README.txt |
| + | # Stage the update |
| + | # Commit the update |
| + | # Push the update |
| + | echo "Another Update" >> README.txt |
| + | git add README.txt |
| + | git commit -m "Another Update to README.txt" |
| + | git push |
| + | |
| + | |[[Image:GitAnotherUpdate.png]] |
| + | |- |
| + | |valign="top"| |
| + | === Look at the modified file === |
| + | |
| + | # Look at the modified file |
| + | |
| + | cat README.txt |
| + | |
| + | |[[Image:GitAnotherUpdateFile.png]] |
| + | |- |
| + | |valign="top"| |
| + | === Revert the Commit === |
| + | |
| + | # Undo the last commit. |
| + | # Save & Exit the editor with the default commit message. |
| + | # Look at the log |
| + | # Push the revert. |
| + | |
| + | git revert HEAD |
| + | git log |
| + | git push |
| + | |
| + | |[[Image:GitRevert.png]] |
| + | |- |
| + | |valign="top"| |
| + | === Look at the reverted file === |
| + | |
| + | # Look at the reverted file |
| + | |
| + | cat README.txt |
| + | |
| + | |[[Image:GitRevertedFile.png]] |
| |} | | |} |
Latest revision as of 17:51, 12 July 2011
Create new Bare Repository
These steps will create a new bare repository called learningGit in ~/code/learnGit/bareRepo/.
- Create the containing directory
- Go to the correct directory
- Create a new bare repository
- Move into the new repository
- Look at the contents of the bare repository
mkdir -p ~/code/learnGit/bareRepo/
cd ~/code/learnGit/bareRepo/
git init --bare --shared learningGit
cd learningGit
ls
|
|
Create Working Repositories
For this example, we are going to create 2 working repositories.
This is so you can see how changes don't affect the other repositories unless pushes & pulls are done.
Create a Working Repository
These steps will create a new working repository called learningGit in ~/code/learnGit/ that is a clone of ~/code/learnGit/bareRepo/learningGit.
- Move to the appropriate directory
- Clone the initial repository
- Move into the working directory
- Look at the contents (Note: learningGit has not yet had any files added to it)
cd ~/code/learnGit
git clone ~/code/learnGit/bareRepo/learningGit
cd learningGit
ls -a
|
|
Create a Second Working Repository
These steps will create a second working repository called learningGit2 in ~/code/learnGit/ that is a clone of ~/code/learnGit/bareRepo/learningGit.
- Move to the appropriate directory
- Clone the initial repository
- Move into the working directory
- Look at the contents (Note: learningGit has not yet had any files added to it)
cd ~/code/learnGit
git clone ~/code/learnGit/bareRepo/learningGit learningGit2
cd learningGit2
ls -a
|
|
Add Files to the Repository
This will create a couple of files in the learningGit repository.
Create the New Files
These steps create README.txt and README1.txt in ~/code/learnGit/learningGit/.
The files will not show up in ~/code/learnGit/learningGit2/.
- Move to the ~/code/learnGit/learningGit
- Look at the current status to see nothing.
- Create README.txt
- Create README1.txt
- Look at the git status to see 2 untracked files.
- Move to the learningGit2 directory
- Check that the files are not there
- Check the status in learningGit2
cd ~/code/learnGit/learningGit
git status
echo This repo is for Learning Git. > README.txt
echo Another file in the repository > README1.txt
git status
cd ~/code/learnGit/learningGit2
ls
git status
Note: the files are not yet stored in the repository.
|
|
Stage the files
This step stages the addition of README.txt and README1.txt in ~/code/learnGit/learningGit/.
The files will not show up in ~/code/learnGit/learningGit2/.
- Move back to the learningGit directory
- Stage the files
- Look at the git status to see 2 staged files.
- Move back to the learningGit2 directory
- Try to pull files
- Check the contents of learningGit2 to verify the files are NOT there.
cd ../learningGit
git add .
git status
cd ../learningGit2
git pull
ls
Note: the files are staged, but not yet stored in the ~/code/learnGit/learningGit repository.
|
|
Commit the Files
This step stores README.txt and README1.txt in the local repository.
The files will not show up in ~/code/learnGit/learningGit2/.
- Move back to the learningGit directory
- Commit the files
- Look at the git status to see no uncommitted changes.
- Move back to the learningGit2 directory
- Try to pull files
- Check the contents of learningGit2 to verify the files are NOT there.
cd ../learningGit
git commit -m "Add the first files"
git status
cd ../learningGit2
git pull
ls
Note: the files are stored in the ~/code/learnGit/learningGit repository, but are not yet in the bare repository.
|
|
Push the files to the bare repository
This step pushes the files to the bare repository.
The files will show up in ~/code/learnGit/learningGit2/.
- Move back to the learningGit directory
- Push the files without specifying the remote or branch (fails)
- Push the files specifying the remote and the branch (succeeds)
- Look at the git status to see no uncommitted changes.
- Move back to the learningGit2 directory
- Try to pull files
- Check the contents of learningGit2 to verify the files are there.
cd ../learningGit
git push
git push origin master
git status
cd ../learningGit2
git pull
ls
The files are now stored in the bare repository, so any new repositories that are clone from it will see the files.
|
|
Undo File Modifications (uncommitted) in the Repository
In the end, this has no affect on the learningGit repositories.
Modify the Files
These steps update README.txt in ~/code/learnGit/learningGit/.
- Move to the ~/code/learnGit/learningGit
- Look at the current status to see nothing.
- Modify README.txt
- Look at the git status to see the changed file.
- Look at the changes.
cd ~/code/learnGit/learningGit
git status
echo AccidentallyOverwrote > README.txt
git status
git diff
|
|
Stage the Modified File
This step stages the modification of README.txt in ~/code/learnGit/learningGit/.
- Stage the file
- Look at the git status to see the staged file.
- Look at the diffs, there are no differences
git add README.txt
git status
git diff
|
|
Unstage the File
This step unstages the modification to README.txt.
- Unstage the file
- Look at the git status to see the unstaged file
- Look at the diffs (they are back).
git reset HEAD README.txt
git status
git diff
|
|
Undo the Modifications
This step undoes the modifications to README.txt.
Your modifications are lost, since they were never stored in the database.
- Look at README.txt
- Undo the modification
- Check the status
- Check the diffs
- Look at README.txt
cat README.txt
git checkout -- README.txt
git status
git diff
cat README.txt
|
|
Remove a File from the Repository
This will remove a file from the learningGit repositories.
Remove the File
These steps removes README1.txt from ~/code/learnGit/learningGit/.
- Look at the current status to see nothing.
- Remove README.txt
- Look at the git status to see the removed file.
- Look at the changes.
git status
ls
rm README1.txt
git status
git diff
|
|
Stage the File Removal
This step stages the removal of README1.txt in ~/code/learnGit/learningGit/.
- Stage the file
- Look at the git status to see the staged file.
- Look at the diffs, there are no differences
git rm README1.txt
git status
git diff
|
|
Commit the File Removal
This step commits the removal of README1.txt.
- Commit the file removal
- Look at the git status to see no modified files
git commit -m "Remove unnecessary file, README1.txt."
git status
|
|
Push & Pull the File Removal
This step pushes the removal of README1.txt to the main repository and pulls it into learningGit2.
- Push the file removal to the origin repository
- Move to learningGit2
- See what files are there
- Check the status
- Pull the latest changes
- See what files are there
- Check the log
git push
cd ~/code/learnGit/learningGit2
ls
git status
git pull
ls
git log
|
|
Undo File Removal (uncommitted) in the Repository
In the end, this has no affect on the learningGit repositories.
Remove the Files
These steps remove README.txt from ~/code/learnGit/learningGit/.
- Move to the ~/code/learnGit/learningGit
- Look at the current status to see nothing.
- Remove README.txt
- Look at the git status to see the removed file.
- Look at the changes.
cd ~/code/learnGit/learningGit
git status
rm README.txt
git status
git diff
|
|
Stage the File Removal
This step stages the removal of README.txt from ~/code/learnGit/learningGit/.
- Stage the file
- Look at the git status to see the staged file.
- Look at the diffs, there are no differences
git rm README.txt
git status
git diff
|
|
Unstage the File Removal
This step unstages the modification to README.txt.
- Unstage the file
- Look at the git status to see the unstaged file
- Look at the diffs (they are back).
git reset HEAD README.txt
git status
git diff
|
|
Undo the Removal
This step undoes the removal of README.txt.
The file removal was never stored in the database.
- Look at the directory contents
- Undo the removal
- Check the status
- Check the diffs
- Look at the directory contents
ls
git checkout -- README.txt
git status
git diff
ls
|
|
Ignore Files
This sets up a .gitignore file in the repository.
Create Files That Should be Ignored
These steps creates temp1.o in ~/code/learnGit/learningGit/ and temp2.o in ~/code/learnGit/learningGit2/.
- Move to ~/code/learnGit/learningGit/
- Create temp1.o
- Check status
- Move to ~/code/learnGit/learningGit2/
- Create temp2.o
- Check status
cd ~/code/learnGit/learningGit
touch temp1.o
git status
cd ~/code/learnGit/learningGit2
touch temp2.o
git status
|
|
Accidentally Stage the file, then Unstage
This step accidentally stages an undesired file due to using the "git add ." and then unstages the file.
- Add everything
- Check status
- Undo the add
- Check status
git add .
git status
git reset HEAD temp2.o
git status
|
|
Ignore .o Files
Adds a .gitignore to ignore .o files.
- Create a .gitignore file containing *.o to ignore .o files
- Check status
- Stage the .gitignore file
- Commit the .gitignore file
- Push the .gitignore file
- Get the status
echo "*.o" > .gitignore
git status
git add .gitignore
git commit -m "Add .gitignore file to ignore *.o files"
git push
git status
|
|
Pull .gitignore into other repository
Pulls the .gitignore file into the other repository
- Move to ~/code/learnGit/learningGit/
- Check status
- Pull in the changes
- Get the status
cd ~/code/learnGit/learningGit/
git status
git pull
git status
ls -a
|
|
Diff against an Old Version
These steps show how to look at an old version of a file
Make updates
These steps make updates to README.txt.
- Look at README.txt
- Make update to README.txt
- Stage the update
- Commit the update
- Make another update to README.txt
- Stage the update
- Commit the update
- Look at README.txt
cat README.txt
echo "Update1" >> README.txt
git add README.txt
git commit -m "Add Update1 to README.txt"
echo "Update2" >> README.txt
git add README.txt
git commit -m "Add Update2 to README.txt"
cat README.txt
|
|
Looking at log
These steps look at the logs.
- Look at the log
- Look at the log for just README.txt
|
|
Diffs using Commit IDs
THESE STEPS CANNOT BE SIMPLY COPIED AND PASTED SINCE YOUR COMMIT IDS WILL BE DIFFERENT THAN MINE!
- Diff current to a previous log, I chose the commit associated with adding .gitignore
- Diff 2 previous logs just for README.txt, I chose the commits associated with the first commit & adding Update1 to README.txt
git diff 6c4366f6d8b52587f7ec589a62498a14cfce720a
git diff 2fb90d8896af728e1ac6d2933812d5c78d8b8be1
c38fc7a7f81a13dfe80ef7129e2294f1b6407608
git diff 2fb90d8896af728e1ac6d2933812d5c78d8b8be1
c38fc7a7f81a13dfe80ef7129e2294f1b6407608 README.txt
|
|
Merging
These steps show how to merge when files are modified in 2 repositories.
This steps assumes the committed, but not pushed changes to learningGit that was done in the Diff against an Old Version section.
Undoing Commits
These steps show how to undo commits, by using revert. It creates a new commit that undoes the specified commit.