pst

Katie Price shares photo of youngest daughter Bunny, 5, wearing heels and lipstick

Her youngest daughter, who she shares with ex Kieran Hayler, wore lipstick and posed with her hand on her hip for the sassy snap.




pst

The lipstick and the burkha


Inspired by a recently released movie, Shoma Chatterji explores how the lipstick and burkha establishes a woman’s identity in public spaces and liberates them in private.




pst

American telephone practice / by Kempster B. Miller

Archives, Room Use Only - TK6161.M55 1905




pst

The first book of codes and ciphers / by Sam and Beryl Epstein ; pictures by Laszlo Roth

Archives, Room Use Only - Z103.3.E67 1956




pst

Capt. Amarinder Singh promises compensation to farmers for land used by PSTCL to install towers




pst

Location matters: For invasive aquatic species, it’s better to start upstream

These green crabs have been doing a number on native shellfish. They eat a lot of clams. And they're a very cosmopolitan species—they've now spread all over, to places as far afield as the West Coast of the U.S. and South Africa.

The post Location matters: For invasive aquatic species, it’s better to start upstream appeared first on Smithsonian Insider.




pst

GHG policy should cover 'upstream' electric vehicle emissions

Regulators should establish a process to consider the full lifecycle greenhouse gas (GHG) emissions of electric vehicles, according to a new US study. This would help ensure that vehicle emissions regulations are placed on a sound scientific basis, manufacturers continue to improve the efficiency of electric vehicles, and the full benefit of regulations to limit GHG emissions from vehicles are realised, say the researchers.




pst

Tapstone Energy Emerges From Restructuring

Its net debt has improved by about $500 million from start to finish.




pst

Imperial Oil Names New SVP, Upstream

He succeeds John Whelan, who has been named VP, Global Heavy Oil, ExxonMobil Upstream Oil and Gas.




pst

Scientists turn Twitter into a comedy fest with #AcademicHipster hashtag

The hashtag has started to trend as academics compete for cooler-than-you tweets. But you probably haven't heard of it.



  • Arts & Culture

pst

Co-living: Is it a hipster commune, a dorm for grown-ups or a new model of sharing?

Apartments are expensive and hard to find. Is co-living a solution or is it just an upscale rooming house?



  • Remodeling & Design

pst

A lipstick-lover's guide to avoiding Red Dye #40

How I learned to find products that don't contain this common additive.



  • Natural Beauty & Fashion

pst

Seniors, not hipsters, will get self-driving cars first

Autonomous vehicles will be ready soon — to ferry retirees around closed communities.




pst

Dumpster-dwelling professor upsizes (just a bit) to portable urban micro-homes

At 208-square-feet, Kasita smart apartments are roughly the size of 6 garbage receptacles.



  • Remodeling & Design

pst

Dumpster, sweet Dumpster: Artist turns waste receptacle into mini-home

Using a repurposed trash bin, Berkeley-based artist Gregory Kloehn creates Oscar the Grouch's dream home: A comfortable, one-room dwelling complete with hardwoo



  • Remodeling & Design

pst

Blue Legacy - St. Louis: Upstream America

Learn about the importance of the city that marks a dividing line in the Mississippi River.



  • Wilderness & Resources

pst

BioLite CampStove beautifully burns through biomass

Your next camping trip should include this camp stove, which is capable of efficiently burning biomass materials like pine needles, small twigs and wood chips.




pst

Sinking temperatures jumpstart winter transformation of Yellowstone waterfall

Osprey Falls at Yellowstone National Park is starting to freeze as this video shows.



  • Climate & Weather

pst

The science behind why hipsters always end up looking the same

Conformity and anti-conformity are just two sides of the same coin.



  • Natural Beauty & Fashion

pst

'The Voice' winner Sawyer Fredericks is an upstate NY farmer

16-year-old entertainer says he's excited to return to his family's 88-acre farm and 'take in the open space and nature around my home.'



  • Arts & Culture

pst

This scientific breakthrough could jumpstart the revival of the Great American Barrier Reef

The Florida Aquarium has discovered how ridged coral reproduce, which had previously been a mystery.



  • Wilderness & Resources

pst

Jumpstart Your Business (and life) With VISION!

Learn to get what you want from life by changing your thinking.




pst

Tourico Vacations Launches Vacation Sweepstakes: Enter Now for a Chance to Win a Great Getaway

Does a seven-night/eight-day stay in the beautiful city of Orlando, FL, sound like a great vacation to you? What if we told you it could be yours for free? Well, it can be!




pst

Hampton Inn Spartanburg North I-85 Offers Close Lodging for USC Upstate Basketball Games

Hampton Inn Spartanburg North I-85 offers close lodging for University of South Carolina Upstate basketball games.




pst

Blu Dumpster Rentals Provides Driveway Safe Dumpsters to Macomb County and Oakland County Michigan Residents

Dumpster Rental Company Provides Rubber Wheel Dumpsters for Home Renovations and Remodels




pst

Gutter Helmet by Harry Helmet Announces Winner of its 2016 Home Makeover Sweepstakes

Sykesville, MD resident receives all new gutters, downspouts and Gutter Helmet




pst

Consumers Sit Down with Dr. John Dempster, ND from The Dempster Clinic - Center for Functional Medicine

The Dempster Clinic - Center for Functional Medicine is a company specialized in Functional Medicine & Naturopathic Medicine, servicing the GTA. The Dempster Clinic - Center for Functional Medicine wins this year its first Consumer Choice Award.




pst

Deborah Lipstadt at Limmud FSU New York: "I Don't Think We Can Cure Antisemitism"

"Not everyone who supports BDS is an anti-Semite. However - if you look at the organisational papers of the BDS movement, and listen to what the people behind it say, it is clearly antisemitism - plain and simple."




pst

Tourico Vacations Launches Vacation Sweepstakes For 2020: Enter and Win a Great Getaway

Ever wish you could just go somewhere spectacular, and forget all your worries and cares? How does a seven-night/eight-day stay in the carefree city of Orlando, FL, sound?




pst

Upstream Rehabilitation Offers Telehealth To Physical and Occupational Therapy Patients Nationwide During Covid-19

Upstream operates nearly 800 clinics in 25 states




pst

SeeMyOptions.com Announces Coronavirus Financial Recovery Workshop. Zoom Webinar Friday, April 17 at 3:30PM PST

An information-filled, one hour webinar-format workshop reviewing the government and non-government options available to consumers across the U.S. during this time of crisis.




pst

Information or Misinformation During a Pandemic: Comparing the effects of following Nassim Taleb, Richard Epstein, or Cass Sunstein on twitter.

So, there’s this new study doing the rounds. Some economists decided to study the twitter followers of prominent coronavirus skeptics and fearmongers, and it seems that followers of Nassim Taleb were more likely to shelter in place, and less like to die of coronavirus, than followers of Richard Epstein or Cass Sunstein. And the differences […]




pst

Price For Loud Media's Upstate New York-Vermont Combo Purchase Disclosed In Filng

The price by which RICKI LEE and AARON ISHMAEL's LOUD MEDIA (SARATOGA RADIO LLC) is purchasing AC simulcast WNYV/WHITEHALL, NY and WVNR-A and the construction permit for W242DF/POULTNEY, … more




pst

Committed to the wrong branch? -, @{upstream}, and @{-1} to the rescue

I get into this situation sometimes. Maybe you do too. I merge feature work into a branch used to collect features, and then continue development but on that branch instead of back on the feature branch

git checkout feature
# ... bunch of feature commits ...
git push
git checkout qa-environment
git merge --no-ff --no-edit feature
git push
# deploy qa-environment to the QA remote environment
# ... more feature commits ...
# oh. I'm not committing in the feature branch like I should be

and have to move those commits to the feature branch they belong in and take them out of the throwaway accumulator branch

git checkout feature
git cherry-pick origin/qa-environment..qa-environment
git push
git checkout qa-environment
git reset --hard origin/qa-environment
git merge --no-ff --no-edit feature
git checkout feature
# ready for more feature commits

Maybe you prefer

git branch -D qa-environment
git checkout qa-environment

over

git checkout qa-environment
git reset --hard origin/qa-environment

Either way, that works. But it'd be nicer if we didn't have to type or even remember the branches' names and the remote's name. They are what is keeping this from being a context-independent string of commands you run any time this mistake happens. That's what we're going to solve here.

Shorthands for longevity

I like to use all possible natively supported shorthands. There are two broad motivations for that.

  1. Fingers have a limited number of movements in them. Save as many as possible left late in life.
  2. Current research suggests that multitasking has detrimental effects on memory. Development tends to be very heavy on multitasking. Maybe relieving some of the pressure on quick-access short term memory (like knowing all relevant branch names) add up to leave a healthier memory down the line.

First up for our scenario: the - shorthand, which refers to the previously checked out branch. There are a few places we can't use it, but it helps a lot:

Bash
# USING -

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit -        # ????
git push
# hack hack hack
# whoops
git checkout -        # now on feature ???? 
git cherry-pick origin/qa-environment..qa-environment
git push
git checkout - # now on qa-environment ????
git reset --hard origin/qa-environment
git merge --no-ff --no-edit -        # ????
git checkout -                       # ????
# on feature and ready for more feature commits
Bash
# ORIGINAL

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit feature
git push
# hack hack hack
# whoops
git checkout feature
git cherry-pick origin/qa-environment..qa-environment
git push
git checkout qa-environment
git reset --hard origin/qa-environment
git merge --no-ff --no-edit feature
git checkout feature
# ready for more feature commits

We cannot use - when cherry-picking a range

> git cherry-pick origin/-..-
fatal: bad revision 'origin/-..-'

> git cherry-pick origin/qa-environment..-
fatal: bad revision 'origin/qa-environment..-'

and even if we could we'd still have provide the remote's name (here, origin).

That shorthand doesn't apply in the later reset --hard command, and we cannot use it in the branch -D && checkout approach either. branch -D does not support the - shorthand and once the branch is deleted checkout can't reach it with -:

# assuming that branch-a has an upstream origin/branch-a
> git checkout branch-a
> git checkout branch-b
> git checkout -
> git branch -D -
error: branch '-' not found.
> git branch -D branch-a
> git checkout -
error: pathspec '-' did not match any file(s) known to git

So we have to remember the remote's name (we know it's origin because we are devoting memory space to knowing that this isn't one of those times it's something else), the remote tracking branch's name, the local branch's name, and we're typing those all out. No good! Let's figure out some shorthands.

@{-<n>} is hard to say but easy to fall in love with

We can do a little better by using @{-<n>} (you'll also sometimes see it referred to be the older @{-N}). It is a special construct for referring to the nth previously checked out ref.

> git checkout branch-a
> git checkout branch-b
> git rev-parse --abbrev-rev @{-1} # the name of the previously checked out branch
branch-a
> git checkout branch-c
> git rev-parse --abbrev-rev @{-2} # the name of branch checked out before the previously checked out one
branch-a

Back in our scenario, we're on qa-environment, we switch to feature, and then want to refer to qa-environment. That's @{-1}! So instead of

git cherry-pick origin/qa-environment..qa-environment

We can do

git cherry-pick origin/qa-environment..@{-1}

Here's where we are (🎉 marks wins from -, 💥 marks the win from @{-1})

Bash
# USING - AND @{-1}

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit -                # ????
git push
# hack hack hack
# whoops
git checkout -                               # ????
git cherry-pick origin/qa-environment..@{-1} # ????
git push
git checkout -                               # ????
git reset --hard origin/qa-environment
git merge --no-ff --no-edit -                # ????
git checkout -                               # ????
# ready for more feature commits
Bash
# ORIGINAL

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit feature
git push
# hack hack hack
# whoops
git checkout feature
git cherry-pick origin/qa-environment..qa-environment
git push
git checkout qa-environment
git reset --hard origin/qa-environment
git merge --no-ff --no-edit feature
git checkout feature
# ready for more feature commits

One down, two to go: we're still relying on memory for the remote's name and the remote branch's name and we're still typing both out in full. Can we replace those with generic shorthands?

@{-1} is the ref itself, not the ref's name, we can't do

> git cherry-pick origin/@{-1}..@{-1}
origin/@{-1}
fatal: ambiguous argument 'origin/@{-1}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

because there is no branch origin/@{-1}. For the same reason, @{-1} does not give us a generalized shorthand for the scenario's later git reset --hard origin/qa-environment command.

But good news!

Do @{u} @{push}

@{upstream} or its shorthand @{u} is the remote branch a that would be pulled from if git pull were run. @{push} is the remote branch that would be pushed to if git push was run.

> git checkout branch-a
Switched to branch 'branch-a'
Your branch is ahead of 'origin/branch-a' by 3 commits.
  (use "git push" to publish your local commits)
> git reset --hard origin/branch-a
HEAD is now at <the SHA origin/branch-a is at>

we can

> git checkout branch-a
Switched to branch 'branch-a'
Your branch is ahead of 'origin/branch-a' by 3 commits.
  (use "git push" to publish your local commits)
> git reset --hard @{u}                                # <-- So Cool!
HEAD is now at <the SHA origin/branch-a is at>

Tacking either onto a branch name will give that branch's @{upstream} or @{push}. For example

git checkout branch-a@{u}

is the branch branch-a pulls from.

In the common workflow where a branch pulls from and pushes to the same branch, @{upstream} and @{push} will be the same, leaving @{u} as preferable for its terseness. @{push} shines in triangular workflows where you pull from one remote and push to another (see the external links below).

Going back to our scenario, it means short, portable commands with a minimum human memory footprint. (🎉 marks wins from -, 💥 marks the win from @{-1}, 😎 marks the wins from @{u}.)

Bash
# USING - AND @{-1} AND @{u}

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit -    # ????
git push
# hack hack hack
# whoops
git checkout -                   # ????
git cherry-pick @{-1}@{u}..@{-1} # ????????
git push
git checkout -                   # ????
git reset --hard @{u}            # ????
git merge --no-ff --no-edit -    # ????
git checkout -                   # ????
# ready for more feature commits
Bash
# ORIGINAL

git checkout feature
# hack hack hack
git push
git checkout qa-environment
git merge --no-ff --no-edit feature
git push
# hack hack hack
# whoops
git checkout feature
git cherry-pick origin/qa-environment..qa-environment
git push
git checkout qa-environment
git reset --hard origin/qa-environment
git merge --no-ff --no-edit feature
git checkout feature
# ready for more feature commits

Make the things you repeat the easiest to do

Because these commands are generalized, we can run some series of them once, maybe

git checkout - && git reset --hard @{u} && git checkout -

or

git checkout - && git cherry-pick @{-1}@{u}.. @{-1} && git checkout - && git reset --hard @{u} && git checkout -

and then those will be in the shell history just waiting to be retrieved and run again the next time, whether with CtrlR incremental search or history substring searching bound to the up arrow or however your interactive shell is configured. Or make it an alias, or even better an abbreviation if your interactive shell supports them. Save the body wear and tear, give memory a break, and level up in Git.

And keep going

The GitHub blog has a good primer on triangular workflows and how they can polish your process of contributing to external projects.

The FreeBSD Wiki has a more in-depth article on triangular workflow process (though it doesn't know about @{push} and @{upstream}).

The construct @{-<n>} and the suffixes @{push} and @{upstream} are all part of the gitrevisions spec. Direct links to each:



    • Code
    • Front-end Engineering
    • Back-end Engineering

    pst

    Committed to the wrong branch? -, @{upstream}, and @{-1} to the rescue

    I get into this situation sometimes. Maybe you do too. I merge feature work into a branch used to collect features, and then continue development but on that branch instead of back on the feature branch

    git checkout feature
    # ... bunch of feature commits ...
    git push
    git checkout qa-environment
    git merge --no-ff --no-edit feature
    git push
    # deploy qa-environment to the QA remote environment
    # ... more feature commits ...
    # oh. I'm not committing in the feature branch like I should be

    and have to move those commits to the feature branch they belong in and take them out of the throwaway accumulator branch

    git checkout feature
    git cherry-pick origin/qa-environment..qa-environment
    git push
    git checkout qa-environment
    git reset --hard origin/qa-environment
    git merge --no-ff --no-edit feature
    git checkout feature
    # ready for more feature commits

    Maybe you prefer

    git branch -D qa-environment
    git checkout qa-environment

    over

    git checkout qa-environment
    git reset --hard origin/qa-environment

    Either way, that works. But it'd be nicer if we didn't have to type or even remember the branches' names and the remote's name. They are what is keeping this from being a context-independent string of commands you run any time this mistake happens. That's what we're going to solve here.

    Shorthands for longevity

    I like to use all possible natively supported shorthands. There are two broad motivations for that.

    1. Fingers have a limited number of movements in them. Save as many as possible left late in life.
    2. Current research suggests that multitasking has detrimental effects on memory. Development tends to be very heavy on multitasking. Maybe relieving some of the pressure on quick-access short term memory (like knowing all relevant branch names) add up to leave a healthier memory down the line.

    First up for our scenario: the - shorthand, which refers to the previously checked out branch. There are a few places we can't use it, but it helps a lot:

    Bash
    # USING -
    
    git checkout feature
    # hack hack hack
    git push
    git checkout qa-environment
    git merge --no-ff --no-edit -        # ????
    git push
    # hack hack hack
    # whoops
    git checkout -        # now on feature ???? 
    git cherry-pick origin/qa-environment..qa-environment
    git push
    git checkout - # now on qa-environment ????
    git reset --hard origin/qa-environment
    git merge --no-ff --no-edit -        # ????
    git checkout -                       # ????
    # on feature and ready for more feature commits
    Bash
    # ORIGINAL
    
    git checkout feature
    # hack hack hack
    git push
    git checkout qa-environment
    git merge --no-ff --no-edit feature
    git push
    # hack hack hack
    # whoops
    git checkout feature
    git cherry-pick origin/qa-environment..qa-environment
    git push
    git checkout qa-environment
    git reset --hard origin/qa-environment
    git merge --no-ff --no-edit feature
    git checkout feature
    # ready for more feature commits

    We cannot use - when cherry-picking a range

    > git cherry-pick origin/-..-
    fatal: bad revision 'origin/-..-'
    
    > git cherry-pick origin/qa-environment..-
    fatal: bad revision 'origin/qa-environment..-'

    and even if we could we'd still have provide the remote's name (here, origin).

    That shorthand doesn't apply in the later reset --hard command, and we cannot use it in the branch -D && checkout approach either. branch -D does not support the - shorthand and once the branch is deleted checkout can't reach it with -:

    # assuming that branch-a has an upstream origin/branch-a
    > git checkout branch-a
    > git checkout branch-b
    > git checkout -
    > git branch -D -
    error: branch '-' not found.
    > git branch -D branch-a
    > git checkout -
    error: pathspec '-' did not match any file(s) known to git

    So we have to remember the remote's name (we know it's origin because we are devoting memory space to knowing that this isn't one of those times it's something else), the remote tracking branch's name, the local branch's name, and we're typing those all out. No good! Let's figure out some shorthands.

    @{-<n>} is hard to say but easy to fall in love with

    We can do a little better by using @{-<n>} (you'll also sometimes see it referred to be the older @{-N}). It is a special construct for referring to the nth previously checked out ref.

    > git checkout branch-a
    > git checkout branch-b
    > git rev-parse --abbrev-rev @{-1} # the name of the previously checked out branch
    branch-a
    > git checkout branch-c
    > git rev-parse --abbrev-rev @{-2} # the name of branch checked out before the previously checked out one
    branch-a

    Back in our scenario, we're on qa-environment, we switch to feature, and then want to refer to qa-environment. That's @{-1}! So instead of

    git cherry-pick origin/qa-environment..qa-environment

    We can do

    git cherry-pick origin/qa-environment..@{-1}

    Here's where we are (🎉 marks wins from -, 💥 marks the win from @{-1})

    Bash
    # USING - AND @{-1}
    
    git checkout feature
    # hack hack hack
    git push
    git checkout qa-environment
    git merge --no-ff --no-edit -                # ????
    git push
    # hack hack hack
    # whoops
    git checkout -                               # ????
    git cherry-pick origin/qa-environment..@{-1} # ????
    git push
    git checkout -                               # ????
    git reset --hard origin/qa-environment
    git merge --no-ff --no-edit -                # ????
    git checkout -                               # ????
    # ready for more feature commits
    Bash
    # ORIGINAL
    
    git checkout feature
    # hack hack hack
    git push
    git checkout qa-environment
    git merge --no-ff --no-edit feature
    git push
    # hack hack hack
    # whoops
    git checkout feature
    git cherry-pick origin/qa-environment..qa-environment
    git push
    git checkout qa-environment
    git reset --hard origin/qa-environment
    git merge --no-ff --no-edit feature
    git checkout feature
    # ready for more feature commits

    One down, two to go: we're still relying on memory for the remote's name and the remote branch's name and we're still typing both out in full. Can we replace those with generic shorthands?

    @{-1} is the ref itself, not the ref's name, we can't do

    > git cherry-pick origin/@{-1}..@{-1}
    origin/@{-1}
    fatal: ambiguous argument 'origin/@{-1}': unknown revision or path not in the working tree.
    Use '--' to separate paths from revisions, like this:
    'git <command> [<revision>...] -- [<file>...]'

    because there is no branch origin/@{-1}. For the same reason, @{-1} does not give us a generalized shorthand for the scenario's later git reset --hard origin/qa-environment command.

    But good news!

    Do @{u} @{push}

    @{upstream} or its shorthand @{u} is the remote branch a that would be pulled from if git pull were run. @{push} is the remote branch that would be pushed to if git push was run.

    > git checkout branch-a
    Switched to branch 'branch-a'
    Your branch is ahead of 'origin/branch-a' by 3 commits.
      (use "git push" to publish your local commits)
    > git reset --hard origin/branch-a
    HEAD is now at <the SHA origin/branch-a is at>

    we can

    > git checkout branch-a
    Switched to branch 'branch-a'
    Your branch is ahead of 'origin/branch-a' by 3 commits.
      (use "git push" to publish your local commits)
    > git reset --hard @{u}                                # <-- So Cool!
    HEAD is now at <the SHA origin/branch-a is at>

    Tacking either onto a branch name will give that branch's @{upstream} or @{push}. For example

    git checkout branch-a@{u}

    is the branch branch-a pulls from.

    In the common workflow where a branch pulls from and pushes to the same branch, @{upstream} and @{push} will be the same, leaving @{u} as preferable for its terseness. @{push} shines in triangular workflows where you pull from one remote and push to another (see the external links below).

    Going back to our scenario, it means short, portable commands with a minimum human memory footprint. (🎉 marks wins from -, 💥 marks the win from @{-1}, 😎 marks the wins from @{u}.)

    Bash
    # USING - AND @{-1} AND @{u}
    
    git checkout feature
    # hack hack hack
    git push
    git checkout qa-environment
    git merge --no-ff --no-edit -    # ????
    git push
    # hack hack hack
    # whoops
    git checkout -                   # ????
    git cherry-pick @{-1}@{u}..@{-1} # ????????
    git push
    git checkout -                   # ????
    git reset --hard @{u}            # ????
    git merge --no-ff --no-edit -    # ????
    git checkout -                   # ????
    # ready for more feature commits
    Bash
    # ORIGINAL
    
    git checkout feature
    # hack hack hack
    git push
    git checkout qa-environment
    git merge --no-ff --no-edit feature
    git push
    # hack hack hack
    # whoops
    git checkout feature
    git cherry-pick origin/qa-environment..qa-environment
    git push
    git checkout qa-environment
    git reset --hard origin/qa-environment
    git merge --no-ff --no-edit feature
    git checkout feature
    # ready for more feature commits

    Make the things you repeat the easiest to do

    Because these commands are generalized, we can run some series of them once, maybe

    git checkout - && git reset --hard @{u} && git checkout -

    or

    git checkout - && git cherry-pick @{-1}@{u}.. @{-1} && git checkout - && git reset --hard @{u} && git checkout -

    and then those will be in the shell history just waiting to be retrieved and run again the next time, whether with CtrlR incremental search or history substring searching bound to the up arrow or however your interactive shell is configured. Or make it an alias, or even better an abbreviation if your interactive shell supports them. Save the body wear and tear, give memory a break, and level up in Git.

    And keep going

    The GitHub blog has a good primer on triangular workflows and how they can polish your process of contributing to external projects.

    The FreeBSD Wiki has a more in-depth article on triangular workflow process (though it doesn't know about @{push} and @{upstream}).

    The construct @{-<n>} and the suffixes @{push} and @{upstream} are all part of the gitrevisions spec. Direct links to each:



      • Code
      • Front-end Engineering
      • Back-end Engineering

      pst

      Committed to the wrong branch? -, @{upstream}, and @{-1} to the rescue

      I get into this situation sometimes. Maybe you do too. I merge feature work into a branch used to collect features, and then continue development but on that branch instead of back on the feature branch

      git checkout feature
      # ... bunch of feature commits ...
      git push
      git checkout qa-environment
      git merge --no-ff --no-edit feature
      git push
      # deploy qa-environment to the QA remote environment
      # ... more feature commits ...
      # oh. I'm not committing in the feature branch like I should be

      and have to move those commits to the feature branch they belong in and take them out of the throwaway accumulator branch

      git checkout feature
      git cherry-pick origin/qa-environment..qa-environment
      git push
      git checkout qa-environment
      git reset --hard origin/qa-environment
      git merge --no-ff --no-edit feature
      git checkout feature
      # ready for more feature commits

      Maybe you prefer

      git branch -D qa-environment
      git checkout qa-environment

      over

      git checkout qa-environment
      git reset --hard origin/qa-environment

      Either way, that works. But it'd be nicer if we didn't have to type or even remember the branches' names and the remote's name. They are what is keeping this from being a context-independent string of commands you run any time this mistake happens. That's what we're going to solve here.

      Shorthands for longevity

      I like to use all possible natively supported shorthands. There are two broad motivations for that.

      1. Fingers have a limited number of movements in them. Save as many as possible left late in life.
      2. Current research suggests that multitasking has detrimental effects on memory. Development tends to be very heavy on multitasking. Maybe relieving some of the pressure on quick-access short term memory (like knowing all relevant branch names) add up to leave a healthier memory down the line.

      First up for our scenario: the - shorthand, which refers to the previously checked out branch. There are a few places we can't use it, but it helps a lot:

      Bash
      # USING -
      
      git checkout feature
      # hack hack hack
      git push
      git checkout qa-environment
      git merge --no-ff --no-edit -        # ????
      git push
      # hack hack hack
      # whoops
      git checkout -        # now on feature ???? 
      git cherry-pick origin/qa-environment..qa-environment
      git push
      git checkout - # now on qa-environment ????
      git reset --hard origin/qa-environment
      git merge --no-ff --no-edit -        # ????
      git checkout -                       # ????
      # on feature and ready for more feature commits
      Bash
      # ORIGINAL
      
      git checkout feature
      # hack hack hack
      git push
      git checkout qa-environment
      git merge --no-ff --no-edit feature
      git push
      # hack hack hack
      # whoops
      git checkout feature
      git cherry-pick origin/qa-environment..qa-environment
      git push
      git checkout qa-environment
      git reset --hard origin/qa-environment
      git merge --no-ff --no-edit feature
      git checkout feature
      # ready for more feature commits

      We cannot use - when cherry-picking a range

      > git cherry-pick origin/-..-
      fatal: bad revision 'origin/-..-'
      
      > git cherry-pick origin/qa-environment..-
      fatal: bad revision 'origin/qa-environment..-'

      and even if we could we'd still have provide the remote's name (here, origin).

      That shorthand doesn't apply in the later reset --hard command, and we cannot use it in the branch -D && checkout approach either. branch -D does not support the - shorthand and once the branch is deleted checkout can't reach it with -:

      # assuming that branch-a has an upstream origin/branch-a
      > git checkout branch-a
      > git checkout branch-b
      > git checkout -
      > git branch -D -
      error: branch '-' not found.
      > git branch -D branch-a
      > git checkout -
      error: pathspec '-' did not match any file(s) known to git

      So we have to remember the remote's name (we know it's origin because we are devoting memory space to knowing that this isn't one of those times it's something else), the remote tracking branch's name, the local branch's name, and we're typing those all out. No good! Let's figure out some shorthands.

      @{-<n>} is hard to say but easy to fall in love with

      We can do a little better by using @{-<n>} (you'll also sometimes see it referred to be the older @{-N}). It is a special construct for referring to the nth previously checked out ref.

      > git checkout branch-a
      > git checkout branch-b
      > git rev-parse --abbrev-rev @{-1} # the name of the previously checked out branch
      branch-a
      > git checkout branch-c
      > git rev-parse --abbrev-rev @{-2} # the name of branch checked out before the previously checked out one
      branch-a

      Back in our scenario, we're on qa-environment, we switch to feature, and then want to refer to qa-environment. That's @{-1}! So instead of

      git cherry-pick origin/qa-environment..qa-environment

      We can do

      git cherry-pick origin/qa-environment..@{-1}

      Here's where we are (🎉 marks wins from -, 💥 marks the win from @{-1})

      Bash
      # USING - AND @{-1}
      
      git checkout feature
      # hack hack hack
      git push
      git checkout qa-environment
      git merge --no-ff --no-edit -                # ????
      git push
      # hack hack hack
      # whoops
      git checkout -                               # ????
      git cherry-pick origin/qa-environment..@{-1} # ????
      git push
      git checkout -                               # ????
      git reset --hard origin/qa-environment
      git merge --no-ff --no-edit -                # ????
      git checkout -                               # ????
      # ready for more feature commits
      Bash
      # ORIGINAL
      
      git checkout feature
      # hack hack hack
      git push
      git checkout qa-environment
      git merge --no-ff --no-edit feature
      git push
      # hack hack hack
      # whoops
      git checkout feature
      git cherry-pick origin/qa-environment..qa-environment
      git push
      git checkout qa-environment
      git reset --hard origin/qa-environment
      git merge --no-ff --no-edit feature
      git checkout feature
      # ready for more feature commits

      One down, two to go: we're still relying on memory for the remote's name and the remote branch's name and we're still typing both out in full. Can we replace those with generic shorthands?

      @{-1} is the ref itself, not the ref's name, we can't do

      > git cherry-pick origin/@{-1}..@{-1}
      origin/@{-1}
      fatal: ambiguous argument 'origin/@{-1}': unknown revision or path not in the working tree.
      Use '--' to separate paths from revisions, like this:
      'git <command> [<revision>...] -- [<file>...]'

      because there is no branch origin/@{-1}. For the same reason, @{-1} does not give us a generalized shorthand for the scenario's later git reset --hard origin/qa-environment command.

      But good news!

      Do @{u} @{push}

      @{upstream} or its shorthand @{u} is the remote branch a that would be pulled from if git pull were run. @{push} is the remote branch that would be pushed to if git push was run.

      > git checkout branch-a
      Switched to branch 'branch-a'
      Your branch is ahead of 'origin/branch-a' by 3 commits.
        (use "git push" to publish your local commits)
      > git reset --hard origin/branch-a
      HEAD is now at <the SHA origin/branch-a is at>

      we can

      > git checkout branch-a
      Switched to branch 'branch-a'
      Your branch is ahead of 'origin/branch-a' by 3 commits.
        (use "git push" to publish your local commits)
      > git reset --hard @{u}                                # <-- So Cool!
      HEAD is now at <the SHA origin/branch-a is at>

      Tacking either onto a branch name will give that branch's @{upstream} or @{push}. For example

      git checkout branch-a@{u}

      is the branch branch-a pulls from.

      In the common workflow where a branch pulls from and pushes to the same branch, @{upstream} and @{push} will be the same, leaving @{u} as preferable for its terseness. @{push} shines in triangular workflows where you pull from one remote and push to another (see the external links below).

      Going back to our scenario, it means short, portable commands with a minimum human memory footprint. (🎉 marks wins from -, 💥 marks the win from @{-1}, 😎 marks the wins from @{u}.)

      Bash
      # USING - AND @{-1} AND @{u}
      
      git checkout feature
      # hack hack hack
      git push
      git checkout qa-environment
      git merge --no-ff --no-edit -    # ????
      git push
      # hack hack hack
      # whoops
      git checkout -                   # ????
      git cherry-pick @{-1}@{u}..@{-1} # ????????
      git push
      git checkout -                   # ????
      git reset --hard @{u}            # ????
      git merge --no-ff --no-edit -    # ????
      git checkout -                   # ????
      # ready for more feature commits
      Bash
      # ORIGINAL
      
      git checkout feature
      # hack hack hack
      git push
      git checkout qa-environment
      git merge --no-ff --no-edit feature
      git push
      # hack hack hack
      # whoops
      git checkout feature
      git cherry-pick origin/qa-environment..qa-environment
      git push
      git checkout qa-environment
      git reset --hard origin/qa-environment
      git merge --no-ff --no-edit feature
      git checkout feature
      # ready for more feature commits

      Make the things you repeat the easiest to do

      Because these commands are generalized, we can run some series of them once, maybe

      git checkout - && git reset --hard @{u} && git checkout -

      or

      git checkout - && git cherry-pick @{-1}@{u}.. @{-1} && git checkout - && git reset --hard @{u} && git checkout -

      and then those will be in the shell history just waiting to be retrieved and run again the next time, whether with CtrlR incremental search or history substring searching bound to the up arrow or however your interactive shell is configured. Or make it an alias, or even better an abbreviation if your interactive shell supports them. Save the body wear and tear, give memory a break, and level up in Git.

      And keep going

      The GitHub blog has a good primer on triangular workflows and how they can polish your process of contributing to external projects.

      The FreeBSD Wiki has a more in-depth article on triangular workflow process (though it doesn't know about @{push} and @{upstream}).

      The construct @{-<n>} and the suffixes @{push} and @{upstream} are all part of the gitrevisions spec. Direct links to each:



        • Code
        • Front-end Engineering
        • Back-end Engineering

        pst

        Committed to the wrong branch? -, @{upstream}, and @{-1} to the rescue

        I get into this situation sometimes. Maybe you do too. I merge feature work into a branch used to collect features, and then continue development but on that branch instead of back on the feature branch

        git checkout feature
        # ... bunch of feature commits ...
        git push
        git checkout qa-environment
        git merge --no-ff --no-edit feature
        git push
        # deploy qa-environment to the QA remote environment
        # ... more feature commits ...
        # oh. I'm not committing in the feature branch like I should be

        and have to move those commits to the feature branch they belong in and take them out of the throwaway accumulator branch

        git checkout feature
        git cherry-pick origin/qa-environment..qa-environment
        git push
        git checkout qa-environment
        git reset --hard origin/qa-environment
        git merge --no-ff --no-edit feature
        git checkout feature
        # ready for more feature commits

        Maybe you prefer

        git branch -D qa-environment
        git checkout qa-environment

        over

        git checkout qa-environment
        git reset --hard origin/qa-environment

        Either way, that works. But it'd be nicer if we didn't have to type or even remember the branches' names and the remote's name. They are what is keeping this from being a context-independent string of commands you run any time this mistake happens. That's what we're going to solve here.

        Shorthands for longevity

        I like to use all possible natively supported shorthands. There are two broad motivations for that.

        1. Fingers have a limited number of movements in them. Save as many as possible left late in life.
        2. Current research suggests that multitasking has detrimental effects on memory. Development tends to be very heavy on multitasking. Maybe relieving some of the pressure on quick-access short term memory (like knowing all relevant branch names) add up to leave a healthier memory down the line.

        First up for our scenario: the - shorthand, which refers to the previously checked out branch. There are a few places we can't use it, but it helps a lot:

        Bash
        # USING -
        
        git checkout feature
        # hack hack hack
        git push
        git checkout qa-environment
        git merge --no-ff --no-edit -        # ????
        git push
        # hack hack hack
        # whoops
        git checkout -        # now on feature ???? 
        git cherry-pick origin/qa-environment..qa-environment
        git push
        git checkout - # now on qa-environment ????
        git reset --hard origin/qa-environment
        git merge --no-ff --no-edit -        # ????
        git checkout -                       # ????
        # on feature and ready for more feature commits
        Bash
        # ORIGINAL
        
        git checkout feature
        # hack hack hack
        git push
        git checkout qa-environment
        git merge --no-ff --no-edit feature
        git push
        # hack hack hack
        # whoops
        git checkout feature
        git cherry-pick origin/qa-environment..qa-environment
        git push
        git checkout qa-environment
        git reset --hard origin/qa-environment
        git merge --no-ff --no-edit feature
        git checkout feature
        # ready for more feature commits

        We cannot use - when cherry-picking a range

        > git cherry-pick origin/-..-
        fatal: bad revision 'origin/-..-'
        
        > git cherry-pick origin/qa-environment..-
        fatal: bad revision 'origin/qa-environment..-'

        and even if we could we'd still have provide the remote's name (here, origin).

        That shorthand doesn't apply in the later reset --hard command, and we cannot use it in the branch -D && checkout approach either. branch -D does not support the - shorthand and once the branch is deleted checkout can't reach it with -:

        # assuming that branch-a has an upstream origin/branch-a
        > git checkout branch-a
        > git checkout branch-b
        > git checkout -
        > git branch -D -
        error: branch '-' not found.
        > git branch -D branch-a
        > git checkout -
        error: pathspec '-' did not match any file(s) known to git

        So we have to remember the remote's name (we know it's origin because we are devoting memory space to knowing that this isn't one of those times it's something else), the remote tracking branch's name, the local branch's name, and we're typing those all out. No good! Let's figure out some shorthands.

        @{-<n>} is hard to say but easy to fall in love with

        We can do a little better by using @{-<n>} (you'll also sometimes see it referred to be the older @{-N}). It is a special construct for referring to the nth previously checked out ref.

        > git checkout branch-a
        > git checkout branch-b
        > git rev-parse --abbrev-rev @{-1} # the name of the previously checked out branch
        branch-a
        > git checkout branch-c
        > git rev-parse --abbrev-rev @{-2} # the name of branch checked out before the previously checked out one
        branch-a

        Back in our scenario, we're on qa-environment, we switch to feature, and then want to refer to qa-environment. That's @{-1}! So instead of

        git cherry-pick origin/qa-environment..qa-environment

        We can do

        git cherry-pick origin/qa-environment..@{-1}

        Here's where we are (🎉 marks wins from -, 💥 marks the win from @{-1})

        Bash
        # USING - AND @{-1}
        
        git checkout feature
        # hack hack hack
        git push
        git checkout qa-environment
        git merge --no-ff --no-edit -                # ????
        git push
        # hack hack hack
        # whoops
        git checkout -                               # ????
        git cherry-pick origin/qa-environment..@{-1} # ????
        git push
        git checkout -                               # ????
        git reset --hard origin/qa-environment
        git merge --no-ff --no-edit -                # ????
        git checkout -                               # ????
        # ready for more feature commits
        Bash
        # ORIGINAL
        
        git checkout feature
        # hack hack hack
        git push
        git checkout qa-environment
        git merge --no-ff --no-edit feature
        git push
        # hack hack hack
        # whoops
        git checkout feature
        git cherry-pick origin/qa-environment..qa-environment
        git push
        git checkout qa-environment
        git reset --hard origin/qa-environment
        git merge --no-ff --no-edit feature
        git checkout feature
        # ready for more feature commits

        One down, two to go: we're still relying on memory for the remote's name and the remote branch's name and we're still typing both out in full. Can we replace those with generic shorthands?

        @{-1} is the ref itself, not the ref's name, we can't do

        > git cherry-pick origin/@{-1}..@{-1}
        origin/@{-1}
        fatal: ambiguous argument 'origin/@{-1}': unknown revision or path not in the working tree.
        Use '--' to separate paths from revisions, like this:
        'git <command> [<revision>...] -- [<file>...]'

        because there is no branch origin/@{-1}. For the same reason, @{-1} does not give us a generalized shorthand for the scenario's later git reset --hard origin/qa-environment command.

        But good news!

        Do @{u} @{push}

        @{upstream} or its shorthand @{u} is the remote branch a that would be pulled from if git pull were run. @{push} is the remote branch that would be pushed to if git push was run.

        > git checkout branch-a
        Switched to branch 'branch-a'
        Your branch is ahead of 'origin/branch-a' by 3 commits.
          (use "git push" to publish your local commits)
        > git reset --hard origin/branch-a
        HEAD is now at <the SHA origin/branch-a is at>

        we can

        > git checkout branch-a
        Switched to branch 'branch-a'
        Your branch is ahead of 'origin/branch-a' by 3 commits.
          (use "git push" to publish your local commits)
        > git reset --hard @{u}                                # <-- So Cool!
        HEAD is now at <the SHA origin/branch-a is at>

        Tacking either onto a branch name will give that branch's @{upstream} or @{push}. For example

        git checkout branch-a@{u}

        is the branch branch-a pulls from.

        In the common workflow where a branch pulls from and pushes to the same branch, @{upstream} and @{push} will be the same, leaving @{u} as preferable for its terseness. @{push} shines in triangular workflows where you pull from one remote and push to another (see the external links below).

        Going back to our scenario, it means short, portable commands with a minimum human memory footprint. (🎉 marks wins from -, 💥 marks the win from @{-1}, 😎 marks the wins from @{u}.)

        Bash
        # USING - AND @{-1} AND @{u}
        
        git checkout feature
        # hack hack hack
        git push
        git checkout qa-environment
        git merge --no-ff --no-edit -    # ????
        git push
        # hack hack hack
        # whoops
        git checkout -                   # ????
        git cherry-pick @{-1}@{u}..@{-1} # ????????
        git push
        git checkout -                   # ????
        git reset --hard @{u}            # ????
        git merge --no-ff --no-edit -    # ????
        git checkout -                   # ????
        # ready for more feature commits
        Bash
        # ORIGINAL
        
        git checkout feature
        # hack hack hack
        git push
        git checkout qa-environment
        git merge --no-ff --no-edit feature
        git push
        # hack hack hack
        # whoops
        git checkout feature
        git cherry-pick origin/qa-environment..qa-environment
        git push
        git checkout qa-environment
        git reset --hard origin/qa-environment
        git merge --no-ff --no-edit feature
        git checkout feature
        # ready for more feature commits

        Make the things you repeat the easiest to do

        Because these commands are generalized, we can run some series of them once, maybe

        git checkout - && git reset --hard @{u} && git checkout -

        or

        git checkout - && git cherry-pick @{-1}@{u}.. @{-1} && git checkout - && git reset --hard @{u} && git checkout -

        and then those will be in the shell history just waiting to be retrieved and run again the next time, whether with CtrlR incremental search or history substring searching bound to the up arrow or however your interactive shell is configured. Or make it an alias, or even better an abbreviation if your interactive shell supports them. Save the body wear and tear, give memory a break, and level up in Git.

        And keep going

        The GitHub blog has a good primer on triangular workflows and how they can polish your process of contributing to external projects.

        The FreeBSD Wiki has a more in-depth article on triangular workflow process (though it doesn't know about @{push} and @{upstream}).

        The construct @{-<n>} and the suffixes @{push} and @{upstream} are all part of the gitrevisions spec. Direct links to each:



          • Code
          • Front-end Engineering
          • Back-end Engineering

          pst

          Audio-video multi-participant conference systems using PSTN and internet networks

          A multi-participant conference system and method is described. The multi-participant system includes a PSTN client, at least one remote client and a first participant client. The PSTN client communicates audio data and the remote clients communicate audio-video data. The first participant client includes a voice over IP (VoIP) encoder, a VoIP decoder, a first audio mixer, and a second audio mixer. The VoIP encoder compresses audio data transported to the PSTN client. The VoIP decoder then decodes audio data from the PSTN client. The first audio mixer mixes the decoded audio data from the PSTN client with the audio-video data from the first participant into a first mixed audio-video data stream transmitted to the remote client. The second audio mixer mixes the audio-video data stream from the first participant with the audio-video data stream from each remote client into a second mixed audio transmitted to the PSTN client.




          pst

          Lipstick tube

          A lipstick tube including a hollow cylindrical base, a lipstick holder disposed in the base, a cap longer than the distance between the top of the protruding element and the top of a lipstick in the lipstick holder covering the lipstick holder, and a protruding element affixed to the lipstick holder and moving together with the lipstick holder relative to the base, the protruding element protruding radially from the holder for engaging the cap in a closed orientation.




          pst

          Lipstick case lipstick body lift seat anti-slipped structure

          A lipstick case lipstick body lift seat anti-slipped structure includes a lipstick case, an outer tube, a lift seat with an opening facing upward, and a lipstick body. A plurality of anti-slipped blocking grooves is formed on an upwardly inclined side of each of the two inclined guiding grooves. The outer tube is sleeved on an outer side of the small diameter guiding tube, and a spiral guiding groove is disposed on an inner wall of the outer tube concavely. The lipstick body is sleeved in the lift seat. Two lift guiding columns are disposed on an outer wall of the lift seat protrudingly for engaging with the inclined guiding grooves correspondingly and pressing into the spiral guiding groove. An anti-slipped blocking portion is protrudingly disposed on an outer diameter of each of the lift guiding columns corresponding to the anti-slipped blocking grooves.




          pst

          Mechanical capstan amplifier

          A mechanical capstan amplifier. The mechanical capstan amplifier (60) having a first tensioner (64) with a first actuating rod (72) extending therefrom. The first tensioner (64) is configured to rotate the first actuating rod (72). The amplifier (60) also includes a drive motor (62) having a drive rod (78) extending therefrom. The drive motor (62) is configured to rotate the drive rod (78). A first cord (66), extending between the first actuating rod (72) and a first load to be moved also extends at least partially around the drive rod (78). Actuation of the first tensioner (64) causes the first cord (66) to tighten around the drive rod (78) and moves the load.




          pst

          Water heater having upstream and downstream manifolds

          A water heater system comprises a water tank, a burner plenum, a flue, a blower, a combustion air passageway, a dilution air passageway, an upstream manifold, and a downstream manifold. The upstream manifold divides air from the blower so that some air flows through the combustion air passageway to the burner plenum and some air flows through the dilution air passageway to the downstream manifold. The downstream manifold combines the air from the dilution air passageway with combustion products from the flue.




          pst

          Mascara with lipstick, concealer, ad-hoc user mixable blush, and glitter component

          The present invention relates generally to a system for easily carrying mascara and multiple other cosmetic products to be applied to the face and in particular to a unitary stick system for easily carrying a mascara and three other cosmetic products for application to the face wherein the user may mix more than one of these other cosmetic products during application to create an aesthetically different cosmetic product.




          pst

          Capstan device

          A capstan device for taking up a braided wire in a braided wire manufacturing apparatus for braiding a plurality of wires to manufacture the braided wire. The capstan device includes a capstan roller having a tapered outer peripheral surface and provided with a flange portion on an end at a small diameter side thereof, and a guide member. The guide member has a first guide surface provided to be turned toward a large diameter side of the capstan roller in an axial direction of the capstan roller in a position on a larger diameter side than a portion having the smallest diameter in the tapered outer peripheral surface, and a second guide surface provided to be protruded from the first guide surface at an outer peripheral side of the tapered outer peripheral surface.




          pst

          Combustor with a combustion region between an inner pipe and outer pipe with an ignition device upstream of the combustion region

          Includes a low flow-rate region (R2) that is disposed on an upstream side of a combustion region (R1) within a second pipe (2), and that has a relatively slow flow-rate of combustion gas (G1) within the second pipe, and a flame kernel formation unit (3a) is disposed in the low flow-rate region.




          pst

          Adelaide – das hippste Großstadtdorf der Welt

          Vor zehn Jahren galt Adelaide noch als langweilig. Doch längst herrscht Aufbruchsstimmung in Südaustraliens größter Stadt. Eine wachsende Kreativszene, coole Läden und günstige Mieten ziehen viele junge Menschen an.




          pst

          The Peasantry: Blain Snipstal (Ep. 13)

          Raj Patel, Tom Philpott and Rebecca McInroy talk with peasant farmer Blain Snipstal about the history of agriculture and racism in America, power, food sovereignty, La Via Campesina, land, and much more.





          pst

          Nici Cumpston



          • ABC Radio Adelaide
          • adelaide
          • Arts and Entertainment:All:All
          • Arts and Entertainment:Contemporary Art:All
          • Arts and Entertainment:Visual Art:All
          • Community and Society:Indigenous (Aboriginal and Torres Strait Islander):All
          • Australia:SA:Adelaide 5000

          pst

          Drought stimulus package includes $100 million for SA to turn on desalination plant, leaving water for farmers upstream

          Murray River water destined for Adelaide will be reallocated to farmers upstream so they can grow feed for their livestock, as part of a federal drought stimulus package announced today.