I want to create a central repository on server that users able to push/pull and commit but i want to apply some restriction like developer able to add(move to staging index) but not commit and reviewer able to check the code and if acceptable, do the commit. is it possible do it with Git itself or any other software?
Git is perfectly capable of receiving code by push. However most developers have a better experience with a remote that has some supporting software to create Pull Requests and other non-build-in stuff, like Github, Bitbucket and Gitlab (in no particular order). If you insist on using just a computer with git as a remote you have to enable access over SSH on said remote. (also open port 22 on your router's firewall).