Git and Github
Hello guys how's it going today I'm going to be telling you guys about git and github
and give a fully practical tutorial all right so what is git now if you
read the Wikipedia page you probably find that it says something like
distributed version control and/or distributed version management system
something along those lines now what does that mean if you're not in
software development just getting started that Prabhas mean very
much to you so let's start from the beginning what our source codes source codes
are very simply just files in folders now like the way you have Word documents
you also have your code is stored in files and folders just like Excel files or
any other Word documents for that matter why do we need version control for your
source code well in programming a lot of people work together on a
lot of files.
For example if you're building a web application
or an iOS application or an Android application for that matter there's going to
be a bunch of files and a bunch of folders now I know that's a very like
generalized simplified way of looking at it but that's all it really is at the
end of the day so if we have files and folders why can't we just work on files
and folders and not worried about version control well here's the thing have
your work on a Word document and when you share that with your friend and you
share it using Dropbox and you both open the file at the same time what
happens!! when you work on it together you override each other's changes now
that's where version control comes in having version control allows you to track
what you've worked on what your friends are working on so you don't clash the
changes and you don't override each other changes and even if you do work on the
same files the version control system will tell you that oh dude you're going to
override your friends changes don't do that or if you want to you want to take a
look at like you want to control how it merges together you can do that.
So
you can't do any of that stuff without version control that is the very reason
why we use version control is to allow us to work together and collaborate in a
more efficient manner now let's talk about the distributed part we have version
control which is git which is installed in our local machine and then we have a
you know your friend has version control that's gate that's installed on his
machine how do you get them to sync up now they can actually talk together if
you if you your friends computer and your computer are in the local network you
guys can actually send each other you know git commits and it'll sync up just
fine if provided you set it up right that's the beautiful thing about being
distributed now the better way to work would be to have a central source
something like github where you can just push your changes to there and then
your friends can just pull those changes down from the cloud and then you guys
work together in this centralized server or service it can be bitbucket
or could be github or you can even host your own.
git init - The git init command is used to initialise a blank
repository. It creates a .git folder in the current working directory
git add .
- The git add command is used to add changes in the staging area. when the git
add is used with the full stop, it's add all the files in the repository to
the staging area.
git commit - The git commit command is used to save the
changes to the local repository. The command helps you keep record of all the
changes made.
git commit -m "Adding repo structure for trojan."
git commit -m
"Adding repo structure for status."
git status - The git status command is used to display the
state of the current repository and the staging area.
git merge - The git merge command is used to integrate different branches into a
single branch.
The process of merging can be defined as a way of
the putting a forth history back together.
git push - The git push command is used to upload the content from the local repository
to the remote repository. Full tutorial of Git and Github
Practical Time
So, lets move on first to check version of git ottherwise if git is not
installed in your system, type this command and install it..
For linux - sudo apt-get install git
For windows - mac - other linux distro -
CLICK HERE
First we check git version: $ git --version
hackerboy@KumarAtulJaiswal ~/Desktop> git --version
git version 2.30.2
hackerboy@KumarAtulJaiswal ~/Desktop>
then we configuration our name and email becuase if any changes done by you so
others will know that this line, features, branch etc you have added.
hackerboy@KumarAtulJaiswal ~/Desktop> sudo git config --global user.name "Kumar Atul Jaiswal"
hackerboy@KumarAtulJaiswal ~/Desktop> sudo git config --global user.email "kumaratuljaiswal222@gmail.com"
if you want to check name and email are successfully set or not and even you
want to edit so let's try this:
hackerboy@KumarAtulJaiswal ~/Desktop> sudo git config --global user.name
Kumar Atul Jaiswal
hackerboy@KumarAtulJaiswal ~/Desktop> sudo git config --global user.email
kumaratuljaiswal222@gmail.com
hackerboy@KumarAtulJaiswal ~/Desktop>
hackerboy@KumarAtulJaiswal ~/Desktop> sudo git config --global --edit
hackerboy@KumarAtulJaiswal ~/Desktop>
Now, we are creating project with this name and email: so, first of all we
made a new directory and then if you want to that's dir convert into
repository
hackerboy@KumarAtulJaiswal ~/Desktop>
hackerboy@KumarAtulJaiswal ~/Desktop> mkdir learn-git
hackerboy@KumarAtulJaiswal ~/Desktop> cd learn-git
hackerboy@KumarAtulJaiswal ~/D/learn-git>
hackerboy@KumarAtulJaiswal ~/D/learn-git> sudo git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /home/hackerboy/Desktop/learn-git/.git/
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
with this (.git) you get to know which other directories, files, are in this
repo because git is tracking them all
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> ls -la
total 20
drwxr-xr-x 3 hackerboy hackerboy 4096 Jun 4 06:29 ./
drwxr-xr-x 94 hackerboy hackerboy 12288 Jun 4 06:27 ../
drwxr-xr-x 7 root root 4096 Jun 4 06:29 .git/
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
Now, we are a new file(project file) and check status with git status for what
changes(modified, delete, add) in this repo.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
add.py
nothing added to commit but untracked files present (use "git add" to track)
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
see the above untracked file let's add the file.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git add add.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: add.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
Now, we are in the staging area. Staging area thats mean the place where we
hold the own changes before commited.
For commit after adding in staging area and if we ignore ( -m )
option, So any editor can open here like
nano, vim, mousepad etc..so that's why we're using it and
besically (-m) for message..
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git commit -m "initial commit"
[master (root-commit) e910f6b] initial commit
1 file changed, 6 insertions(+)
create mode 100644 add.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
Now, with this command "git log" we can check to how many commit in the
previous time.. As if this author had committed this time and a
hashcode is also generated here.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git log
commit e910f6b5f1208c697329ed4207d8cd57e598ee77 (HEAD -> master)
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 06:38:00 2021 +0530
initial commit
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
So now we make some small changes inside the file and then with the help of
"git status" command we see what it shows.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git status
On branch master
Changes not staged for commit:
(use "git add <file> .." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: add.py
no changes added to commit (use "git add" and/or "git commit -a")
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
Now we create a another new file OK! and then check once again
modified file is add.py and
untracked file is atul.py
here, we some changes in add.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: add.py
Untracked files:
(use "git add <file>..." to include in what will be committed)
atul.py
no changes added to commit (use "git add" and/or "git commit -a")
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
let's add this atul.py file
If you want to add only one file now and not the other then you can do
this.
now atul.py file is added in staging are let's commit this.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git add atul.py
[sudo] password for hackerboy:
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: atul.py
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: add.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
sudo git commit -m "adding atul.py".
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git commit -m "adding atul.py"
[master 62ca770] adding atul.py
1 file changed, 2 insertions(+)
create mode 100644 atul.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
Now git status only one file (add.py) remaining here(this is
modification file - add.py) .
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: add.py
no changes added to commit (use "git add" and/or "git commit -a")
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
So, if we check log file with git log command, as you can see here are two
files commited.
first one is atul.py and second one is starting commit..
(HEAD is a pointer so it keeps on moving from commit to commit.
.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git log
commit 62ca770ab7c38abccb8f456900a47a55b05c3bf5 (HEAD -> master)
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:06:28 2021 +0530
adding atul.py
commit e910f6b5f1208c697329ed4207d8cd57e598ee77
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 06:38:00 2021 +0530
initial commit
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
so what happend next? You can also (git add . ) this will ensure that
all the files will be added to the staging area. .
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git add .
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git commit -m "added message in add.py"
[master 744a177] added message in add.py
1 file changed, 4 insertions(+), 4 deletions(-)
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
let's check git log command and here are 3 commited file...
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git log
commit 744a177504dd38541098ea79a5bb8feb982442f4 (HEAD -> master)
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:15:00 2021 +0530
added message in add.py
commit 62ca770ab7c38abccb8f456900a47a55b05c3bf5
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:06:28 2021 +0530
adding atul.py
commit e910f6b5f1208c697329ed4207d8cd57e598ee77
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 06:38:00 2021 +0530
initial commit
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
Now let's going back to past...Because some discard or change in the file. .
commit e910f6b5f1208c697329ed4207d8cd57e598ee77
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 06:38:00 2021 +0530
initial commit
first you need to any hex code that you want to copy, so we copy the hash code
of initial commit. .
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git checkout e910f6b5f1208c697329ed4207d8cd57e598ee77
Note: switching to 'e910f6b5f1208c697329ed4207d8cd57e598ee77'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at e910f6b initial commit
hackerboy@KumarAtulJaiswal ~/D/learn-git ((e910f6b5…))>
After this as you can see this file has been deleted. .
and if you want to back again in master..
so type this command and as you can see (add.py and atul.py) file
revert back and Switched to branch 'master'. .
hackerboy@KumarAtulJaiswal ~/D/learn-git ((e910f6b5…))> sudo git checkout master
Previous HEAD position was e910f6b initial commit
Switched to branch 'master'
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
again deleted. .
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git checkout e910f6b5f1208c697329ed4207d8cd57e598ee77
Note: switching to 'e910f6b5f1208c697329ed4207d8cd57e598ee77'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at e910f6b initial commit
hackerboy@KumarAtulJaiswal ~/D/learn-git ((e910f6b5…))>
Now we slowly slowly come in the concept of branch and the head is inside this
branch (HEAD detached at e910f6b) .
hackerboy@KumarAtulJaiswal ~/D/learn-git ((e910f6b5…))> sudo git branch
* (HEAD detached at e910f6b)
master
hackerboy@KumarAtulJaiswal ~/D/learn-git ((e910f6b5…))>
now we check git log and as you can see here are only commit file becuase we
are in this branch (HEAD detached at e910f6b) and in this branch only 1
file is available. .
hackerboy@KumarAtulJaiswal ~/D/learn-git ((e910f6b5…))> git log
commit e910f6b5f1208c697329ed4207d8cd57e598ee77 (HEAD)
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 06:38:00 2021 +0530
initial commit
hackerboy@KumarAtulJaiswal ~/D/learn-git ((e910f6b5…))>
and if you want to check previous all commit So you have to come inside this
branch(master) .
hackerboy@KumarAtulJaiswal ~/D/learn-git ((e910f6b5…))>
hackerboy@KumarAtulJaiswal ~/D/learn-git ((e910f6b5…))> sudo git checkout master
Previous HEAD position was e910f6b initial commit
Switched to branch 'master'
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
All changes are here .
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git log
commit e584eac2994d004ddfc1ce89f4d235bb25b9682c (HEAD -> master)
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:38:29 2021 +0530
added message in add.py
commit 744a177504dd38541098ea79a5bb8feb982442f4
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:15:00 2021 +0530
added message in add.py
commit 62ca770ab7c38abccb8f456900a47a55b05c3bf5
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:06:28 2021 +0530
adding atul.py
commit e910f6b5f1208c697329ed4207d8cd57e598ee77
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 06:38:00 2021 +0530
initial commit
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
So, now we see the branch concept
Each repository can have one or more branches. The main branch — the one where
all changes eventually get merged back into, and is called master. This is the
official working version of your project.
This means that you want that there are many features in one branch and
updating some things in one feature and does not have any side effect on other
features, so that is why we can create or create many branches inside one
branch..like tree concept .
lets create another branch
git branch <branch name>
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git branch developer
[sudo] password for hackerboy:
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git branch
developer
* master
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git checkout developer
Switched to branch 'developer'
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)>
So, now we see the branch conceptgit checkout -b kumar/multiply
okay here, why we are using -b, basically with -b command we are directly
checkout (enter) into multiply branch and by this name(kumar) it is known that
who is updating in what way in this project. .
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)> sudo git checkout -b kumar/multiply
Switched to a new branch 'kumar/multiply'
hackerboy@KumarAtulJaiswal ~/D/learn-git (kumar/multiply)>
git status
hackerboy@KumarAtulJaiswal ~/D/learn-git (kumar/multiply)> git status
On branch kumar/multiply
Untracked files:
(use "git add <file>..." to include in what will be committed)
multi.py
nothing added to commit but untracked files present (use "git add" to track)
hackerboy@KumarAtulJaiswal ~/D/learn-git (kumar/multiply)>
add and commit .
hackerboy@KumarAtulJaiswal ~/D/learn-git (kumar/multiply)> sudo git add multi.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (kumar/multiply)> sudo git commit -m "added multi.py"
[kumar/multiply fe6515e] added multi.py
1 file changed, 6 insertions(+)
create mode 100644 multi.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (kumar/multiply)>
when we come back to developer branch as you can see multi.py file has
been removed .
hackerboy@KumarAtulJaiswal ~/D/learn-git (kumar/multiply)> sudo git checkout developer
Switched to branch 'developer'
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)>
But now we want to bring the multi.py file inside the developer branch
because now we think that our features are ready. sudo git merge
kumar/multiply .
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)> sudo git merge kumar/multiply
Updating e584eac..fe6515e
Fast-forward
multi.py | 6 ++++++
1 file changed, 6 insertions(+)
create mode 100644 multi.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)> sudo git log
commit fe6515e67a1b9015626fc3003dd27707ceae0ce7 (HEAD -> developer, kumar/multiply)
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 20:33:17 2021 +0530
added multi.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)>
And if we come to the master branch then you can see here that there is no
multi.py file in the master branch because the master branch and other branch
does not know what the developer branch is doing.
There is no multi.py file. .
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)> sudo git checkout master
Switched to branch 'master'
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git log
commit e584eac2994d004ddfc1ce89f4d235bb25b9682c (HEAD -> master)
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:38:29 2021 +0530
added message in add.py
commit 744a177504dd38541098ea79a5bb8feb982442f4
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:15:00 2021 +0530
added message in add.py
commit 62ca770ab7c38abccb8f456900a47a55b05c3bf5
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:06:28 2021 +0530
adding atul.py
commit e910f6b5f1208c697329ed4207d8cd57e598ee77
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 06:38:00 2021 +0530
initial commit
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
Now we merging all branch and file in one master branch.
There is
no multi.py file.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git merge developer
Updating e584eac..fe6515e
Fast-forward
multi.py | 6 ++++++
1 file changed, 6 insertions(+)
create mode 100644 multi.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git log
commit fe6515e67a1b9015626fc3003dd27707ceae0ce7 (HEAD -> master, kumar/multiply, developer)
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 20:33:17 2021 +0530
added multi.py
commit e584eac2994d004ddfc1ce89f4d235bb25b9682c
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:38:29 2021 +0530
added message in add.py
commit 744a177504dd38541098ea79a5bb8feb982442f4
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:15:00 2021 +0530
added message in add.py
commit 62ca770ab7c38abccb8f456900a47a55b05c3bf5
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 07:06:28 2021 +0530
adding atul.py
commit e910f6b5f1208c697329ed4207d8cd57e598ee77
Author: Kumar Atul Jaiswal <kumaratuljaiswal222@gmail.com>
Date: Sat Jun 5 06:38:00 2021 +0530
initial commit
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
Now we want that there should be some such file which git is not able to
track, it should not go to 'git echo system' So for this we can keep
the file inside gitignore.
This is a secret hash-key and I want that it should not be exposed or uploaded
on GitHub because someone can misuse it, it is only for us developers to use
in our project.
.
by command
touch .gitignore
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
key.py
nothing added to commit but untracked files present (use "git add" to track)
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
I want that it should not be exposed or uploaded on GitHub so type file name
(key.py) inside .gitignore file .
and as you can see the file is hidden and git is not able to track.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
and if you want hidden .gitignore file also and even git is not able to
track.
Now we talk about github
first of all we will create a new repo in github
And as soon as the repository is created it will ask you to setup what
you want to do, do you already have a repo or do you want to
create.
we have already a repo so that's why we using this setup...
"""
…or push an existing repository from the command line
git remote add origin https://github.com/whoiskumaratul/learn-git.git
git branch -M main
git push -u origin main
"""
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git remote -v
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git remote add origin https://github.com/whoiskumaratul/learn-git.git
[sudo] password for hackerboy:
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git remote -v
origin https://github.com/whoiskumaratul/learn-git.git (fetch)
origin https://github.com/whoiskumaratul/learn-git.git (push)
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
if some type of error are coming, dont worry!!!
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git branch -M master
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> git push -u origin main
error: src refspec main does not match any
error: failed to push some refs to 'https://github.com/whoiskumaratul/learn-git.git'
hackerboy@KumarAtulJaiswal ~/D/learn-git (master) [1]>
so don't worry type this command and give a username and password of github
account.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git push -u origin master
Username for 'https://github.com': whoiskumaratul
Password for 'https://whoiskumaratul@github.com':
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 4 threads
Compressing objects: 100% (13/13), done.
Writing objects: 100% (15/15), 1.42 KiB | 242.00 KiB/s, done.
Total 15 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/whoiskumaratul/learn-git.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
after refreshing the page as you can see all files are uploaded.
But if you want to add new file via command line as we have been doing
so far
let's create new file called as color.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git add color.py
[sudo] password for hackerboy:
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git commit -m "added color.py"
[master f3dc945] added color.py
1 file changed, 10 insertions(+)
create mode 100644 color.py
hackerboy@KumarAtulJaiswal ~/D/learn-git (master) hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git push -u origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 565 bytes | 282.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/whoiskumaratul/learn-git.git
fe6515e..f3dc945 master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)>
Now, we adding a developer branch
sudo git checkout
developer
sudo git push -u origin developer
hackerboy@KumarAtulJaiswal ~/D/learn-git (master)> sudo git checkout developer
Switched to branch 'developer'
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)>
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)>
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)> sudo git push -u origin developer
Username for 'https://github.com': whoiskumaratul
Password for 'https://whoiskumaratul@github.com':
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'developer' on GitHub by visiting:
remote: https://github.com/whoiskumaratul/learn-git/pull/new/developer
remote:
To https://github.com/whoiskumaratul/learn-git.git
* [new branch] developer -> developer
Branch 'developer' set up to track remote branch 'developer' from 'origin'.
hackerboy@KumarAtulJaiswal ~/D/learn-git (developer)>
How to collaborate with multilple users ?
if you want multiple users and developers to work on one project so you
need to use open source.
First you make the project open source and then people fork on that project
and after that make some changes in it and send pull request.
and
second one is you need to add other person that who some changes and modified
in project with collaborate.
go to setting --> manage access --> add your collaborater --> and
wait for the invitation to be accepted.
invitation accepted Vola!!!!
now I am going to my own account (
whoiskumaratul
) repo with 2nd account (
hackingtruthin
)
now i want to add some contribution as a
hackingtruthin account. so first i need to fork of
whoiskumaratul
repo
successfully forked
then i am going to in terminal and edit my own name and email as a
hackingtruthin account...
type-
sudo git config --global --edit
and change name and email and then one directory backed and checkout
master branch with sudo git checkout master.
so if any error are coming when you change master branch, do dont' worry go
ahead and type next command
ls
nano README.md (file that i want to some changes it)
cat README.md
sudo git status
as you can see this, modified file available here,so let's add and commit
sudo git add README.md
sudo git commit -m "readme.md updated"
sudo git push
hackerboy@KumarAtulJaiswal ~/Desktop (master)>
hackerboy@KumarAtulJaiswal ~/Desktop (master)>
hackerboy@KumarAtulJaiswal ~/Desktop (master)> sudo git config --global --edit
hackerboy@KumarAtulJaiswal ~/Desktop (master)>
hackerboy@KumarAtulJaiswal ~/Desktop (master)> cd Lets-Contribution
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)> sudo git checkout master
error: pathspec 'master' did not match any file(s) known to git
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main) [1]>
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main) [1]> ls
README.md
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)> nano README.md
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)> cat README.md
# Lets-Contribution
This is my first contribution and wait
file will be updated...
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)>
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)> sudo git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)> sudo git add README.md
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)> sudo git commit -m "readme.md updated"
[main 1831fb8] readme.md updated
1 file changed, 1 insertion(+), 1 deletion(-)
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)> sudo git push
Username for 'https://github.com': hackingtruthin
Password for 'https://hackingtruthin@github.com':
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 271 bytes | 271.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/hackingtruthin/Lets-Contribution.git
6b5ddf9..1831fb8 main -> main
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)>
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)>
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)> ls
README.md
hackerboy@KumarAtulJaiswal ~/D/Lets-Contribution (main)>
in actual repo...he doesn't know about this...
readme.md file has been updated and here you can see 3 commits showing
The change can be added to the file of the Open by the
Open Pull request.
create pull request,
Here you can give your message that you have changed the file
and finally pull request submitted. After this, the owner will now check that
the change made by you should be added to it in your project or not
now what i see, i have to come a new pull request
so let's
check it. open request option and as you can see here are 1 pull requests
then i check to what changes by them..
go to file
changes option
then review and approve.
and then i submitted with appreciation message.
then merge pull request and confirm it
and go back to our account whoiskumaratul
and check readme.md file
then if we going to commit section, here you can see what changes made
by someone or ownself.
So in the same way you can modify, delete, add new file, features someone's
project added by these steps
same repeate
fork
clone
changes
push
pull request
Disclaimer
This was written for educational purpose and pentest only.
The author
will not be responsible for any damage ..!
The author of this tool is not
responsible for any misuse of the information.
You will not misuse the
information to gain unauthorized access.
This information shall only be
used to expand knowledge and not for causing malicious or damaging
attacks. Performing any hacks without written permission is illegal ..!
All
video’s and tutorials are for informational and educational purposes only. We
believe that ethical hacking, information security and cyber security should
be familiar subjects to anyone using digital information and computers. We
believe that it is impossible to defend yourself from hackers without knowing
how hacking is done. The tutorials and videos provided on www.hackingtruth.in
is only for those who are interested to learn about Ethical Hacking, Security,
Penetration Testing and malware analysis. Hacking tutorials is against misuse
of the information and we strongly suggest against it. Please regard the word
hacking as ethical hacking or penetration testing every time this word is
used.
All tutorials and videos have been made using our own
routers, servers, websites and other resources, they do not contain any
illegal activity. We do not promote, encourage, support or excite any illegal
activity or hacking without written permission in general. We want to raise
security awareness and inform our readers on how to prevent themselves from
being a victim of hackers. If you plan to use the information for illegal
purposes, please leave this website now. We cannot be held responsible for any
misuse of the given information.
- Hacking Truth by
Kumar Atul Jaiswal
I hope you liked this post, then you
should not forget to share this post at all.
Thank you so much :-)