Search Your Question

GIT for Interview

1. Difference between Distributed & Central version control system.
A. GIT is distributed version control system.
     SVN is central version control system.

Central Version Control System : It is located in one place and people can check out from central location to make their changes and then check everything back in but some times it is problematic if central repository is corrupted or central system is not connected through network. For that we have to take backup manually in local machine.

Distributed Version Control System : Everybody has local repository. Your local repository has all information that remote repository has and till last sync done between local and remote repository. So sometimes, if remote repository is not able to be connected through internet, then we can see every changes as it is also saved in local repository. So every developer has repository in locally. So it is called in distributed version control system.


 2. Check version of GIT installed on your machine.
A. git --version

3. Setting configuration
A.
Set username : git config --global user.name "Manan Shah"
Set email : git config --global user.email "manan0shah@gmail.com"
Check configuration setting : git config --list

4. Get git function help
A.

git help <verb>
git verb --help

i.e git help config
     git config --help

     git help add
     git add -help

5. Setup git in your project
A. Goto finder/folder of project which we want to track, using terminal using cd command and write following command
 git init

6. To check status of untracked files in our repository
A. git status

7. Ignore files which we want to keep untracked. Like personal settings, preferences, etc
A. Create a gitignore file : touch .gitingore
     Write down list of files which we want to ignore to track as below :
     .ds_store
     .xcodeproj
     *.py  (wild card used to ignore files which has py extension)

After this, git status

--------------------------------------------

There are 3 area in area we have knowledge about.
1. Working directory
2. Staging Area
3. Git directory

(image from Pro Git" book : https://git-scm.com/book/en/v2)

1. Working directory : Untracked files reside in working directory. -> Files in red colour in terminal
2. Staging Area : When we use command git add . , then this files added to staging area. Which can be committed. -> Files in green colour in terminal
3. Git directory : When we commit our changes, then it goes to git directory. That can be push to remote directory. git commit -m "message for this commit like changes in setting"

Note : If we want to uncommit changes or remote files from staging area to working directory, then Use git reset 

We can check all commit log using command : git log

------------------------------------------

Cloning git repo

git clone <url_of_remote_git> <local_directory>

git clone https://....../remote_repo.git .    (. means in current folder)

-----------------------------------------

Viewing remote repository info

git remote -v  : Give information about your local repository path for fetch, push

git branch -a : Give list of all local and remote branches

-----------------------------------------

Pushing code

git diff : tells difference between remote and local files changes
git pull origin master : pull all changes made from remote repo to local
git push origin master : push all changes from local to remote repo

-----------------------------------------

Merge branch

Suppose, we have worked on calc branch and we need to merge calc branch into master branch.

git checkout master :  Switch to master branch or in which we have to merge
git pull origin master : Pull all changes in master branch from remote server
git branch --merged : Check branch name in which code is to be merged
git merge calc : Merge calc branch with master branch. It shows number of changes. If any conflicts are there, then  we have to solve it using editing code.
git push origin master : Push merged code to remote master branch

-----------------------------------------

Deleting branch

git branch -d calc : Delete calc branch locally
git branch -a : To check whether branch is deleted or not.
git push origin --delete calc : To delete calc branch remotely

-----------------------------------------------------------------------------------------------------------------

Different parameters for adding files to staging area  :

1. git add -A or git add --all (Default): adding all files from leading directory into staging area
2. git add -A my_dir/ or git add my_dir/ : adding only files located in my_dir into staging area
3. git add -u : adding only modified files into staging area
4. git add -u my_dir/ : adding only updated files located in my_dir into staging area
5. git add . : adding all files in current directory into staging area
6. git add .gitignore : Add only specific file into staging area.

Difference between git add -A and git add . : git add -a add all files in leading directory and git add . only add files from current directory.

-----------------------------------------------------------------------------------------------------------------

Switch to branch without commiting

git stash save "worked on save function" : It will save this branch at this point without commited. And this branch at initial stage.
git stash list : List all stashes here
stash@{0} : On add : worked on save function
git stash apply stash@{0} : Come to our point back using this command. stash will not be dropped.
git stash pop : Come to our point back & drop stash from list.
git stash drop stash@{0} : drop stash@{0}
git stash clear : Clear all stash in list

If we want to do changes from one branch to another branch, then this is most wanted method.

Suppose, I have changed code in master branch.  But I want it to CalC branch. Then,
git stash save "add function" :  save stash on master branch
git checkout CalC :  Switched to CalC branch
git stash pop : apply changes
git add . : add files to staging area
git commit -m "intr" : commit & push


Note : New stash come at top position. Always at 0th position. @{0}.

-----------------------------------------------------------------------------------------------------------------

Git difftool & mergetool

git diff : It shows modification with red(Previous) and green(Current) colour content between previous and current file on terminal window. It is very hard to see where we have changed or what word we have changed. Because git diff shows full line instead of changed word.

So instead of using, there are many diff tool and merge tool available. I,e DiffMerge
Using this tool, we can easily find changes and solve if any conflicts are there just because it is graphically represent instead of just terminal.
For that we have to download and install that tool and configuration with our git. After configuration, check configuration using git config --global --list

Check
diff.tool = diffmerge
merge.tool = diffmerge

happened or not?

Now,
to run that diff tool ,
git difftool : It required permission to open diff tool, press Y to open difftool, and we can see modification clearly with color and word by word.

We can take changes according to we required by simply click on which changes and from which file(previous or current).

git mergetool : To merge branch. If any conflict occur, we can easily solve using this type tool due to visual representation.



-----------------------------------------------------------------------------------------------------------------

To change last commit message,
git commit --amend -m "new message" : It will change message of last commit message.

Hight thank full to Corey Schafer

I took help from following videos  :

1. Git Tutorial for Beginners: Command-Line Fundamentals
2. Git Tutorial: Fixing Common Mistakes and Undoing Bad Commits
3. Git Tutorial: Using the Stash Command
4. Git Tutorial: Diff and Merge Tools
5. Git Tutorial: Change DiffMerge Font-Size on Mac OSX
6. Git Tutorial: Difference between "add -A", "add -u", "add .", and "add *"

If you have any doubts for git, please comment on this blog.