Skip to main content

How to remove a file from GIT history

GIT, a source code management tool is famous among developers. Often times, developers miss to realise or understand .gitignore file in GIT (a most popular open source repository tool). This file helps to avoid unrelated files getting into the project repository. As a newbie to GIT, developers miss to add .gitignore and hence we get to see unwanted files or binaries added in the project repository. This may sometimes lead to issues for other developers.

So, how do we remove a file from GIT history that should not have been added in the first place? Git has numerous commands of which git filter-branch can help us in this scenario.

For example: 
.iml files are Intellij editor files that will be created for each module. Lets suppose a developer (newbie) added this .iml file in project repository unknowingly. An other developer imports project modules in his/her IntelliJ editor. Then the latter will see *.iml as modified file. But this should not have been considered for project repository. So Lets help this other developer to remove this *.iml file using git filter-branch command.

git filter-branch --index-filter "git rm --cached --ignore-unmatch *.iml" HEAD

On executing the above command, git finds all the commits and remove *.iml files and rewrite the history. This will ensure *.iml file removed from GIT history at all. A word of caution, for larger projects, this command may take time to complete as it has to go through all the commits in the branch mentioned (HEAD). After the successful execution of the command, the other developer can add *.iml in .gitignore file so it never gets considered for Project Repository Tracking.

For more on this command, please visit git-filter-branch

Caveat: If the file can be removed using single commit, please refrain from using the above command, and use the normal commit to achieve what you need.

Comments

Popular posts from this blog

CSRF enabled Ajax requests using Spring Security

Many of you who have worked on Spring Security might be aware of the fact that Spring Security protects applications from Cross Site Request Forgery using _csrf tokens in the request sent to the web server. You can find a detailed understanding in the Spring documentation page. The objective of this post is to explain how to send _csrf tokens in the Ajax requests when we protect our application URL and application access using spring security.

How to get CSRF tokens
While we submit a form using an application that is protected with Spring Security, the form gets a default hidden parameter in the form body when using <form:form> element. The param contains the _csrf tokens to authenticate the requests in the server. In case we use other ways to create forms, we have to manually include a hidden parameter that contains name as ${_csrf.parameterName} and  value as ${_csrf.token}. For example,
<inputtype="hidden"name="${_csrf.parameterName}"value="${_csrf…

In-Place editing with X-Editable using Datatable plugin

Introduction
In-place editing is a trending feature that can be seen in many latest web applications, a popular example would be trello.com where the editing data happens on the web page without any explicit forms or popups. Another such example I could point out is, thoughtplan.com. The in-place editing is very nice in such a way that editing data seems so natural and user friendly.

To enable in-place editing, there are many free JQuery plugins available on the internet. We are discussing a very popular plugin called x-editable. Most of the time we use html tables to display data where in-place editing is enabled. Hence we need another plugin to elegantly display tables with enormous data. We use a famous JQuery plugin called datatable. Both of these plugins are used widely and free to use.

Assumption      : Bootstrap 3, JQuery used Projects

Integration
In order to enable datatable features on any ordinary table found on web page, we should initialise datatable plugin for that table. I…

Thymeleaf th:remove vs th:if Processors

Interestingly Makinus team encountered a scenario where the team has to choose between th:remove and th:if processors. The situation is like this. Makinus team worked on a project and the team lead suggested to go with #Thymeleaf template instead of decades old JSP. Hence it adopted Thymeleaf and Thymelead Layout framework to do layout-ing.

Thymeleaf Layout
Thymeleaf layout is a framework that helps doing the layout work just as tiles framework does it using JSP technology. The framework has 5 processors, important of which is layout:decorate. The processor layout:decorate works in the layout-content template model where the content template is a small piece of template that replaces content part of the layout template. This works as if parent/child templating mode where parent will define layout format while the child template replaces only the specified content portions.

Head Element Merging Strategy
Thymeleaf layout uses a special strategy to merge parent and child template <head…