git
How does ‘git pull’ and ‘git fetch’ differ?
In simple terms, the difference between the two Git
commands is that
git pull
is composed by a git fetch
followed by a git merge
.
When you use git pull
, Git
will automatically merge any pulled commits into the branch you are currently working in, without letting you review them first. You will get a prompt only if there is conflict found during automatic merging.
When you use git fetch
, Git
retrieves any commits from the target branch that do not exist in your current branch and stores them in your local repository
. However, it will not merge them with your current branch. To integrate the new commits into your current branch, you need to use git merge
manually.
This command is particularly useful if you need to keep your repository up to date, but are working on something that might break if you merge your files.
For example, if you will go offline and you need to have those commits available to you but cannot merge at the time, using git fetch
you will download the new commits to your machine without affecting your current code. Later you will be able to merge the new commits to your branch as/when you please.
Just some notes for setting up a new OS to develop projects on GNU/Linux Fedora
If the project is in C++ and uses mysql then install
sudo dnf install mysql++-devel;
If the project is in C/C++ and you are missing talloc.h install
sudo dnf install libtalloc-devel;
Set your name and email for all git projects
git config --global --edit Then fill-in the configuration file similar to below # This is Git's per-user configuration file. [user] # Please adapt and uncomment the following lines: # name = Michael, George # email = [email protected] [user] name = Michael, George email = [email protected] [gui] editor = gedit
or use these individual commands to set the configuration
[george@fedora ~]$ git config --global user.name "Michael, George" [george@fedora ~]$ git config --global user.email "[email protected]"
Increase amount of inotify watchers
If you are using CLion
or IntelliJ IDEA
by jetbrains
increase the amount of inotify
watchers.
CLion
, IntelliJ
(and other tools of jetbrains
) use inotify
on GNU
/Linux
to monitor directories for changes. It’s common to encounter the system limit on the number of files they monitor.
inotify
requires a watch handle to be set for each directory in the project. Unfortunately, the default limit of watch handles will not be enough for sized projects, and reaching the limit will force the jetbrains
platform to fall back to recursive scans of directory trees.
Create a file (as root) called /etc/sysctl.d/idea.conf
and add the following content to it to increase the number of watchers to 512K
fs.inotify.max_user_watches = 524288
Then call sysctl
to reload the settings and apply the new configuration
[george@fedora ~]$ sudo sysctl -p --system;
-
-p[FILE]
or--load[=FILE]
: Load insysctl
settings from the file specified or/etc/sysctl.conf
if none given.
Specifying-
as filename means reading data from standard input. Using this option will mean arguments tosysctl
are files, which are read in the order they are specified.
The file argument may be specified as regular expression. -
--system
: Load settings from all system configuration files./run/sysctl.d/*.conf /etc/sysctl.d/*.conf /usr/local/lib/sysctl.d/*.conf /usr/lib/sysctl.d/*.conf /lib/sysctl.d/*.conf /etc/sysctl.conf
git: How to move locally committed (but not pushed) changes to a new branch 2
Recently, we’ve been working on a certain branch, we did some changes and performed a couple of commits that were not pushed on the remote system.
There was a complication and it was decided that the local changes should not be pushed to the branch that we were working on.
Rather, they changes should go to a new branch which eventually will be merged.
As mentioned above, we already had done some changes and we already had performed the commits.
git status
would give us the following:
$ git status; On branch scanner_pdu_parser_master Your branch is ahead of 'origin/scanner_pdu_parser_master' by 2 commits. (use "git push" to publish your local commits)
So, we needed to change the branch for those local commits.
Solution – Move the local commits to a new branch
First we got the name of the current branch using the command:
git branch;
Then, we switched to a new local branch
git checkout -b banana_peeler;
And, we pushed the local branch to the remote system:
git push --set-upstream origin banana_peeler;
Afterwards, we switched back to the previous branch
git checkout apple_peeler;
And reset it back to its original form, removing our local commits from it:
git reset --hard origin/apple_peeler;
Please note that the last command will delete all changes that are not committed as well.
In other words, any file you modified and did not commit or push, they will be reverted back to the original code as well.