When multiple users are working with the same Git files and folders, you can run into conflict issues that might be tricky. In most cases, you want to resolve the conflicts manually. However, there might be cases where you want to git force pull to overwrite your local changes. The git pull
command might not be enough to force this kind of overwrite. Let’s create a situation where this might happen.
Warning: The below technique to force git pull will delete your local changes. If you’re trying this out in a live environment, you can end up losing your work. The example below starts from scratch, so you can try it out on the test repository before you use it with a real environment.
Initial data
Let's create the following directories:
├── repository
├── user1
└── user2
Let’s create an empty repository:
cd repository/
mkdir myproject.git
cd myproject.git/
git init --bare
This is going to be the remote repository. Now let’s go into the user1 folder, clone the empty repository, and add two files (ReadMe.txt
and Image1.txt
). Then, push the change to the remote repository (please use your clone path).
git clone /Users/_work/LearnGIT/git_force_pull/repository/myproject.git
touch ReadMe.txt Image1.txt
git add -A
git commit -m "Initialization"
git push origin master
Now let’s go to the user2 folder and clone the remote repository.
git clone /Users/_work/LearnGIT/git_force_pull/repository/myproject.git
Your directories should look as follows:
├── repository
│ └── myproject.git
│ ├── HEAD
│ ├── branches
│ ├── config
│ ├── description
│ ├── hooks
│ ├── info
│ ├── objects
│ └── refs
├── user1
│ └── myproject
│ ├── Image1.txt
│ └── ReadMe.txt
└── user2
└── myproject
├── Image1.txt
└── ReadMe.txt
Both user1 and user2 have the same Image1.txt
and ReadMe.txt
files.
[pbutton]
Conflict case
Now let's create the conflict situation. Both users start working on Image2.txt
file locally. After a while, user1 commits and pushes the changes to remote repository.
In the user1/myproject
folder, the following steps take place:
echo "USER1" > Image2.txt
git add -A
git commit -m "Added Image2.txt (USER1)"
git push origin master
You can check the history:
git log --oneline
3713dfc Added Image2.txt (USER1)
1151a79 Initialization
Now let's go to the user2/myproject
folder. User2 creates and commits the code locally.
echo "USER2" > Image2.txt
git add -A
git commit -m "Added Image2 (USER2)"
But user2 decides to see if any other user has made changes. So user2 pulls changes and runs into a problem:
git pull origin master
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /Users/_work/LearnGIT/git_force_pull/repository/myproject
* branch master -> FETCH_HEAD
1151a79..3713dfc master -> origin/master
Auto-merging Image2.txt
CONFLICT (add/add): Merge conflict in Image2.txt
Automatic merge failed; fix conflicts and then commit the result.
At this stage, if you check the history of user2's workspace, you see that user2 has the following log:
git log --oneline
1e2c8d3 Added Image2 (USER2)
1151a79 Initialization
The conflict can be manually resolved. But user2 decides to get rid of the local changes and start from where user1 left off.
Conflict resolution using git force pull
The following method is the most effective way to force git pull:
git fetch origin master
git reset --hard origin/master
(If you are working with branches, use the branch name instead of master
branch). Now if you check user2 history, you see that 1e2c8d3
change has been replaced by 3713dfc
change (Your local hashes will be different).
git log --oneline
3713dfc Added Image2.txt (USER1)
1151a79 Initialization
So the git force pull has got rid of user2's local changes and reset it to origin master
.
Special Tip: During a continuous integration/continuous delivery (CI/CD) process, the CI/CD system might not pull the latest changes if the workspace is not cleaned properly. You can use the above method to make sure all of your versioned files are force synced with your remote origin. Also, if you want to get rid of untracked files, you can use the following git command:
git clean -f -d
Warning: The above command will delete all untracked files from your workspace.
Conclusion
Using the above technique to force overwrite your current workspace can save you time. However, use this technique with caution. If you make it a regular habit, you might mistakenly use it and lose your local work unintentionally.
Looking for help with GIT? Drop us a line and get FREE consultation!
Discover how our services can benefit your business. Leave your contact information and our team will reach out to provide you with detailed information tailored to your specific needs. Take the next step towards achieving your business goals.
Find out which cloud stack AWS or Azure powers your business best
Pro tips for handling cloud security threats and keeping your data locked down
Git commands to keep your DevOps workflows smooth and efficient