Git (Basic)

When you have a renamed file and changed file which should not be added to staging.
git add -A filename
This command will add both the renamed file and old file info.
When you have a deleted file and need to add the file to staging.
git add -u filename
When you want to avoid adding staging some parts in a file,
First, see the changed part
git diff filename
Then,
git add -p filename
s
You can split the changed part
git diff –cached filename

When you want to make a change to pushed commit, first you need to check the commit nubmer by

git reflog, and then, you need to git revert
git revert commitnumber

Then, you can check the file name and reverted part by

git diff HEAD~1

You can check diff between commits

git diff HEAD~1..HEAD
git diff HEAD~2..HEAD

You can see the working tree

git log --oneline --graph --decorate --oneline

Git rebase
Edit the commit message the past commit made older than three
Example git commit is like this

0397116 Modified the first line
783e423 Edited new file again
0e6616c Edited new file
a8d305e Made a new file

so if you git rebase 0e6616c Edited new file
git rebase -i a8d305e
This shows the commit after 0e6616c without including the commit itself. You may notice that the order of the commit is also from older to newer.

pick 0e6616c Edited new file
pick 783e423 Edited new file again
pick 0397116 Modified the first line

# Rebase 0e6616c..0397116 onto 0e6616c
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.

To change 0e6616c commit message, you need to change ‘pick’ to ‘reward'(shorthand: ‘r’), and overwrite it.

r 0e6616c Edited new file
pick 783e423 Edited new file again
pick 0397116 Modified the first line

Then, editor will open immediately, so edit the commit message, and save it.

Edited the commit message

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD^1 ..." to unstage)
#
# modified: newfile.txt

In case you choose edit mode, you can continue git rebase by git rebase –continue.
Merge a branch without leaving history of the branch using Git rebase
You can merge a branch into another branch without leaving its history using git rebase.
We have the history below on develop branch.

83cc4a4 Third new line on develop
d841441 Another new line on develop
958766b New line on develop
0b4b08b Modified the first line
3160d83 Edited new file again
e48e1ec Edited the commit message
a8d305e Made a new file

And, the new branch branched off develop has this history.

f264ad7 Modified the line
4d4c182 New line of the second file
3bf6232 Added a new file
0b4b08b Modified the first line
3160d83 Edited new file again
e48e1ec Edited the commit message
a8d305e Made a new file

Then, a newbranch should be merged into develop branch without making newbranch history.

git rebase develop

Because the same file is edited, you encounter conflict so resolve the conflict. If it is successful, then you will see

First, rewinding head to replay your work on top of it...Applying: Added a new file
Applying: New line of the second file
Applying: Modified the line

You need to fast-forward merge which only moves HEAD position.

git checkout develop
git merge newbranch

Now develop branch has the history below. (You will not see any merged branch)

24a927e Modified the line
3f9e302 New line of the second file
e23361b Added a new file
83cc4a4 Third new line on develop
d841441 Another new line on develop
958766b New line on develop
0b4b08b Modified the first line
3160d83 Edited new file again
e48e1ec Edited the commit message
a8d305e Made a new file
3f9e302 New line of the second file

Because parent commit is different, the added commits have new id numbers.
Merge a branch branched off another branch into develop using Git rebase –onto
thirdbranch has this history. thirdbranch branched off “Modified the line” of the newbranch. (So the two branch have “Modified the line” commit)

9d209a8 Added one more line on newfile3
7826f31 Added another line on newfile3
9c738c3 Added one more file
24a927e Modified the line

…(same commit with newbranch)
Then, if you want to merge from “Added one more file” and the rest of the commit into develop branch without including “Modified the line” commit which newbranch also has, then you should do,

git rebase --onto develop newbranch thirdbranch

Then, you should fast-forward marge

git checkout develop
git merge thirdbranch

*Note: if newbranch doesn’t have a new commit from “Modified the line”, it just says
Already on ‘thirdbranch’
Current branch thirdbranch is up to date.
For more information, you should check out https://git-scm.com/book/en/v2/Git-Branching-Rebasing

foreach loop

foreach loop

This code creates a new variable named links which is an array, and uses foreach statement to loop over each item inside this variables, items array, and it’s giving us the delta for each item, so field has multiple values like tags field. Delta represents which position or which delta that value is, so the first one will be delta[0] and second one will be delta[1], so forth, and item is going to be an actual item, a little chunk of renderable array that is when we look at kpr items.

$links = array();
 
foreach ($variables['items'] as $delta => $item) {
  $links[] = drupal_render($item);
}

 

Grid layout and Flexbox

Bootstrap
When you use Bootstrap way, you need a wrapper to make a row

<div class="wrapper">
  <div class="item item1"></div>
  <div class="item item2"></div>
  <div class="item item3"></div>
</div>
.wrapper {
  margin: 0 -15px;
}


.wrapper:before,
.wrapper:after {
 clear: both;
}


.item {
  float: left;
  padding: 0 15px;
}

You can use display:inline-block instead of float:left. When a column stick out because it has a longer line, set vertical-align: top; to .item
However, you cannot assign negative margin to item, it aligns to left, so you always need wrapper tag to use this method.
One thing that you can do is select wrapper element more top level one. Then you can add negative margin to it without adding wrapper tag by hooking function on Drupal.
Flexbox
Flexbox gives you more flexibility to grid layout. You don’t need to worry about shrinking column. The browser support is from IE11 and there are some reported bugs.
You can check the bug reports here.
https://github.com/philipwalton/flexbugs
You can also check how Flexbox work in Grid system here.

Browser support
http://caniuse.com/#search=flexbox

JavaScript : putting a function into a variable and executing it

 

  start();
  function start(){

    notwork = function test2(){
      console.log('This doesn't work');
      start();
    }

  }

This one doesn’t work because test2 function cannot start automatically.

 

  start();
  function start(){

    timer = setTimeout(function(){
      console.log('yes, it works');
      start();
    }, 200);

  }

This one works because setTimeout start automatically.