Git: Testing Someone Else’s Pull Request on your local dev machine

You do not have to clone every developer’s fork or repository¬† and then checkout their respective branch in order to test the pull request locally on your dev box ūüėČ

This tutorial will show you how to checkout a pull request on your own computer. This can be very helpful when you want to find bugs and test out new features before they get merged into the main project.

That gist does describe the config changes required in .git/config of the project.

Basically you need to add this line in config

fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

which will allow you to checkout pr locally

Obviously, change the github url to match your project’s URL. It ends up looking like this:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

Now fetch all the pull requests:

$ git fetch origin
From github.com:joyent/node
 * [new ref]         refs/pull/1000/head -> origin/pr/1000
 * [new ref]         refs/pull/1002/head -> origin/pr/1002
 * [new ref]         refs/pull/1004/head -> origin/pr/1004
 * [new ref]         refs/pull/1009/head -> origin/pr/1009
...

To check out a particular pull request:

$git checkout <pr-id>

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'
Advertisements

git : pushing a new project to you github repo

Its a good practice to push your pet project to github repository. Below commands will help you.

First, you need to create a project in github repo and copy its repository url which will act has your remote origin, then you need to init you local repository and link them. so that you can push them once its all set.

git init
git add -A
git commit -m 'Added my project'
git remote add origin git@github.com:premaseem/my-new-project.git
git push -u -f origin master

With this, there are a few things to note. The¬†-f¬†flag stands for¬†force. This will automatically overwrite everything in the remote directory. We’re only using it here to overwrite the README that GitHub automatically initialized. If you skipped that, the¬†-f¬†flag isn’t really necessary.

The -u flag sets the remote origin as the default. This lets you later easily just do git push and git pull without having to specifying an origin since we always want GitHub in this case

 

Git: Pushing to other fork

Objective:

You clone someone else fork and wants to push in your fork

I created a fork (let’s call it¬†myrepo) of another repository (let’s call it¬†orirepo) on GitHub. Later, I cloned¬†orirepo.

git clone https://github.com/original/orirepo.git

I modified about 20 files, then I staged my change and made a commit

git add
git commit

However, when I tried to push

git push

I got this error:

remote: Permission to original/orirepo.git denied to mylogin.
fatal: unable to access 'https://github.com/original/orirepo.git/': The requested URL returned error: 403

 

Solution:

By default, when you clone a repository

then

  • the local config of the resulting clone lists only one remote called¬†origin, which is associated with the URL of the repository you cloned;
  • the local¬†master¬†branch in your clone is set to¬†track¬†origin/master.

Therefore, if you don’t modify the config of your clone, Git interprets

git push

as

git push origin master:origin/master

In other words,¬†git push¬†attempts to push your local¬†master¬†branch to the¬†master¬†branch that resides on the remote repository (known by your clone as¬†origin). However, you’re not allowed to do that, because you don’t have write access to that remote repository.

You need to

  1. either redefine the origin remote to be associated with your fork, by running
    git remote set-url origin https://github.com/RemiB/myrepo.git
    
  2. or, if you want to preserve the original definition of the origin remote, define a new remote (called myrepo, here) that is associated to your fork:
    git remote add myrepo https://github.com/RemiB/myrepo.git
    

    Then you should be able to push your local master branch to your fork by running

    git push myrepo master
    

    And if you want to tell Git that git push should push to myrepo instead of origin from now on, you should run

    git push -u myrepo master
    

instead.

 

Git: Combining the commits

To squash the last 3 commits into one:

git reset --soft HEAD~3
git commit -m "New message for the combined commit"

Pushing the squashed commit

If the commits have been pushed to the remote:

git push origin +name-of-branch

The plus sign forces the remote branch to accept your rewritten history, otherwise you will end up with divergent branches

If the commits have NOT yet been pushed to the remote:

git push origin name-of-branch

GIT : Generate git Ignore file using online tool -> gitignore.io

Hi Friends,

When we create project using IDE like eclipse, web storm, intellij, a lot of additional files shows up other then required code base. Best practice is to add “.gitignore” file, mention the pattern of (non required) files and commit it. That way git will ignore those file and will not track any changes for those file.

To generate the pattern, you can take help of below online tool, this will give you .gitignore file which can be added and used.

https://www.gitignore.io

GitHub : How to Sync from Forked repoit

Hi Friends,

Fork is not a git concept, its a github concept (github is a git repository host / provider). Fork mean a your personalized copy of base repository in the github account/host. The work flow is

  1. Create a Fork (copy of base repo)
  2. Clone the Forked (your personalized) repo to local box
  3. Commit changes in local and push to origin.
  4. Sync local from Fork upstream
  5. Create Pull request.

githubFork

 

Here is the hands on exercise and explanation on youtube

Usually in git there is only origin and local, in git hub as we have origin and upstream, we can sync by follow below commands.

premaseem$ git remote -v 

premaseem$ git remote add upstream git@remoteURL.github.com

premaseem$ git remote -v 

premaseem$git fetch upstream

premaseem$ git merge upstream/master

premaseem$ git push origin master