diff --git a/CHANGELOG b/CHANGELOG
index 85ab53c52389806f4f37fa0db16b8820d2d5dff7..16986281bb8712c04010001876f701b7fb936140 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -40,6 +40,7 @@ v 8.12.0
   - Allow to set request_access_enabled for groups and projects
   - Cleanup misalignments in Issue list view !6206
   - Only create a protected branch upon a push to a new branch if a rule for that branch doesn't exist
+  - Add Pipelines for Commit
   - Prune events older than 12 months. (ritave)
   - Prepend blank line to `Closes` message on merge request linked to issue (lukehowell)
   - Fix issues/merge-request templates dropdown for forked projects
diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb
index 02fb3f568905626aa5f97bc5ae8ca335cfcd21db..cdfc1ba7b9292603e6bef8e4cfb753972f54c143 100644
--- a/app/controllers/projects/commit_controller.rb
+++ b/app/controllers/projects/commit_controller.rb
@@ -10,10 +10,11 @@ class Projects::CommitController < Projects::ApplicationController
   before_action :require_non_empty_project
   before_action :authorize_download_code!, except: [:cancel_builds, :retry_builds]
   before_action :authorize_update_build!, only: [:cancel_builds, :retry_builds]
+  before_action :authorize_read_pipeline!, only: [:pipelines]
   before_action :authorize_read_commit_status!, only: [:builds]
   before_action :commit
-  before_action :define_commit_vars, only: [:show, :diff_for_path, :builds]
-  before_action :define_status_vars, only: [:show, :builds]
+  before_action :define_commit_vars, only: [:show, :diff_for_path, :builds, :pipelines]
+  before_action :define_status_vars, only: [:show, :builds, :pipelines]
   before_action :define_note_vars, only: [:show, :diff_for_path]
   before_action :authorize_edit_tree!, only: [:revert, :cherry_pick]
 
@@ -31,6 +32,9 @@ class Projects::CommitController < Projects::ApplicationController
     render_diff_for_path(@commit.diffs(diff_options))
   end
 
+  def pipelines
+  end
+
   def builds
   end
 
@@ -96,10 +100,6 @@ class Projects::CommitController < Projects::ApplicationController
     @noteable = @commit ||= @project.commit(params[:id])
   end
 
-  def pipelines
-    @pipelines ||= project.pipelines.where(sha: commit.sha)
-  end
-
   def ci_builds
     @ci_builds ||= Ci::Build.where(pipeline: pipelines)
   end
@@ -134,8 +134,9 @@ class Projects::CommitController < Projects::ApplicationController
   end
 
   def define_status_vars
-    @statuses = CommitStatus.where(pipeline: pipelines).relevant
-    @builds = Ci::Build.where(pipeline: pipelines).relevant
+    @ci_pipelines = project.pipelines.where(sha: commit.sha)
+    @statuses = CommitStatus.where(pipeline: @ci_pipelines).relevant
+    @builds = Ci::Build.where(pipeline: @ci_pipelines).relevant
   end
 
   def assign_change_commit_vars(mr_source_branch)
diff --git a/app/helpers/ci_status_helper.rb b/app/helpers/ci_status_helper.rb
index 639deb7c521f60617f029b369f49d8fb2d916115..b7f48630bd4b7aab25037a47521089a6726d97f0 100644
--- a/app/helpers/ci_status_helper.rb
+++ b/app/helpers/ci_status_helper.rb
@@ -56,7 +56,7 @@ module CiStatusHelper
 
   def render_commit_status(commit, tooltip_placement: 'auto left')
     project = commit.project
-    path = builds_namespace_project_commit_path(project.namespace, project, commit)
+    path = pipelines_namespace_project_commit_path(project.namespace, project, commit)
     render_status_with_link('commit', commit.status, path, tooltip_placement: tooltip_placement)
   end
 
diff --git a/app/views/projects/ci/pipelines/_pipeline.html.haml b/app/views/projects/ci/pipelines/_pipeline.html.haml
index 6391c67021b1183763d2b98c4b34bde045cd8dd7..04e48a4dc170d3501f1917c93849c2511b60ecbf 100644
--- a/app/views/projects/ci/pipelines/_pipeline.html.haml
+++ b/app/views/projects/ci/pipelines/_pipeline.html.haml
@@ -1,4 +1,7 @@
 - status = pipeline.status
+- show_commit = local_assigns.fetch(:show_commit, true)
+- show_branch = local_assigns.fetch(:show_branch, true)
+
 %tr.commit
   %td.commit-link
     = link_to namespace_project_pipeline_path(pipeline.project.namespace, pipeline.project, pipeline.id) do
@@ -10,14 +13,14 @@
     .branch-commit
       = link_to namespace_project_pipeline_path(pipeline.project.namespace, pipeline.project, pipeline.id) do
         %span ##{pipeline.id}
-      - if pipeline.ref
-        - unless defined?(hide_branch) && hide_branch
-          .icon-container
-            = pipeline.tag? ? icon('tag') : icon('code-fork')
-          = link_to pipeline.ref, namespace_project_commits_path(pipeline.project.namespace, pipeline.project, pipeline.ref), class: "monospace branch-name"
-      .icon-container
-        = custom_icon("icon_commit")
-      = link_to pipeline.short_sha, namespace_project_commit_path(pipeline.project.namespace, pipeline.project, pipeline.sha), class: "commit-id monospace"
+      - if pipeline.ref && show_branch
+        .icon-container
+          = pipeline.tag? ? icon('tag') : icon('code-fork')
+        = link_to pipeline.ref, namespace_project_commits_path(pipeline.project.namespace, pipeline.project, pipeline.ref), class: "monospace branch-name"
+      - if show_commit
+        .icon-container
+          = custom_icon("icon_commit")
+        = link_to pipeline.short_sha, namespace_project_commit_path(pipeline.project.namespace, pipeline.project, pipeline.sha), class: "commit-id monospace"
       - if pipeline.latest?
         %span.label.label-success.has-tooltip{ title: 'Latest build for this branch' } latest
       - if pipeline.triggered?
diff --git a/app/views/projects/commit/_builds.html.haml b/app/views/projects/commit/_builds.html.haml
index a508382578a7c9f24492317fb8412ff9771972f6..b7087749428bec7659c5e5e6ecf09cef13ad5e94 100644
--- a/app/views/projects/commit/_builds.html.haml
+++ b/app/views/projects/commit/_builds.html.haml
@@ -1,2 +1,2 @@
-- @pipelines.each do |pipeline|
+- @ci_pipelines.each do |pipeline|
   = render "pipeline", pipeline: pipeline, pipeline_details: true
diff --git a/app/views/projects/commit/_ci_menu.html.haml b/app/views/projects/commit/_ci_menu.html.haml
index 935433306ea020d1bc58a645e7fc289596ff6fd6..cbfd99ca4482ca72b3d1f737512950d3b99e080b 100644
--- a/app/views/projects/commit/_ci_menu.html.haml
+++ b/app/views/projects/commit/_ci_menu.html.haml
@@ -3,6 +3,11 @@
     = link_to namespace_project_commit_path(@project.namespace, @project, @commit.id) do
       Changes
       %span.badge= @diffs.size
+  - if can?(current_user, :read_pipeline, @project)
+    = nav_link(path: 'commit#pipelines') do
+      = link_to pipelines_namespace_project_commit_path(@project.namespace, @project, @commit.id) do
+        Pipelines
+        %span.badge= @ci_pipelines.count
   = nav_link(path: 'commit#builds') do
     = link_to builds_namespace_project_commit_path(@project.namespace, @project, @commit.id) do
       Builds
diff --git a/app/views/projects/commit/_pipelines_list.haml b/app/views/projects/commit/_pipelines_list.haml
index 95a8c7b4a5d013ae1f13084a5053b2917dd58890..998812793a27d9e17dbc65c5865e63629b52e2f8 100644
--- a/app/views/projects/commit/_pipelines_list.haml
+++ b/app/views/projects/commit/_pipelines_list.haml
@@ -7,8 +7,8 @@
       %table.table.builds
         %tbody
           %th Status
-          %th Commit
+          %th Pipeline
           %th Stages
           %th
           %th
-        = render pipelines, commit_sha: true, stage: true, allow_retry: true, stages: pipelines.stages, status_icon_only: true, hide_branch: true
+        = render pipelines, commit_sha: true, stage: true, allow_retry: true, stages: pipelines.stages, status_icon_only: true, show_commit: false
diff --git a/app/views/projects/commit/pipelines.html.haml b/app/views/projects/commit/pipelines.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..d85d6729a818a1bb55d8e21a6998bb509bb94007
--- /dev/null
+++ b/app/views/projects/commit/pipelines.html.haml
@@ -0,0 +1,7 @@
+- page_title "Pipelines", "#{@commit.title} (#{@commit.short_id})", "Commits"
+
+.prepend-top-default
+  = render "commit_box"
+
+= render "ci_menu"
+= render "pipelines_list", pipelines: @ci_pipelines
diff --git a/app/views/projects/pipelines/index.html.haml b/app/views/projects/pipelines/index.html.haml
index faf28db68d1bb7233139020e4c663f2c6ee79610..50c7e5044b2760a2c828d2e932178f14e08e759a 100644
--- a/app/views/projects/pipelines/index.html.haml
+++ b/app/views/projects/pipelines/index.html.haml
@@ -46,7 +46,7 @@
         %table.table.builds
           %tbody
             %th Status
-            %th Commit
+            %th Pipeline
             %th Stages
             %th
             %th
diff --git a/config/routes.rb b/config/routes.rb
index 4d6ec699cbde2ac9489380fe5c4b3a5b5fa7504c..ba3864b92be0143b22691a565593acad1e1e4b8f 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -635,6 +635,7 @@ Rails.application.routes.draw do
           member do
             get :branches
             get :builds
+            get :pipelines
             post :cancel_builds
             post :retry_builds
             post :revert