|
|
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" |
Revision as of 14:45, 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.