了解rebase如何在git中工作

时间:2017-08-16 21:09:49

标签: git git-rebase

到目前为止,我已使用$ git pull origin master (这是fetchmerge$ git push origin master的组合。现在我听说rebase。我已经阅读了有关它的文档,但遗憾的是我无法理解它是如何工作的。

两个问题:

一: ' (位于DE 的顶部)是什么意思?

before rebase:

A <- B <- C
^         ^
 \         \
  D <- E <- F

after git rebase master:

A <- B <- C <- D' <- E'

二: 应该何时使用$ git rebase(也与git pull --rebase相同?)

1 个答案:

答案 0 :(得分:4)

  

一: #------------------------------------------------------------------ from zmq import Stopwatch; aClk_E2E = Stopwatch(); aClk_E2E.start() #------------------------------------------------------------------ from __future__ import print_function import numpy as np import tensorflow as tf import datetime IP_1 = '10.132.0.2'; port_1 = '2222' IP_2 = '10.132.0.3'; port_2 = '2222' cluster = tf.train.ClusterSpec( { "local": [ IP_1 + ":" + port_1, IP_2 + ":" + port_2 ], } ) server = tf.train.Server( cluster, job_name = "local", task_index = 0 ) # server.join() # @machine2 ( task:1 ) n = 5 L = 1000 def matpow( M, n ): if n < 1: # Abstract cases where n < 1 return M else: return tf.matmul( M, matpow( M, n - 1 ) ) G = tf.Graph() with G.as_default(): with tf.device( "/job:local/task:1/cpu:0" ): c1 = [] tB = tf.placeholder( tf.float32, [L, L] ) # tensor B placeholder with tf.device( "/job:local/task:1/gpu:0" ): c1.append( matpow( tB, n ) ) with tf.device( "/job:local/task:0/cpu:0" ): c2 = [] tA = tf.placeholder( tf.float32, [L, L] ) # tensor A placeholder with tf.device( "/job:local/task:0/gpu:0" ): c2.append( matpow( tA, n ) ) sum2 = tf.add_n( c1 + c2 ) #---------------------------------------------------------<SECTION-UNDER-TEST> t1_2 = datetime.datetime.now() with tf.Session( "grpc://" + IP_1 + ":" + port_1, graph = G ) as sess: A = np.random.rand( L, L ).astype( 'float32' ) B = np.random.rand( L, L ).astype( 'float32' ) sess.run( sum2, { tA: A, tB: B, } ) t2_2 = datetime.datetime.now() #---------------------------------------------------------<SECTION-UNDER-TEST> #------------------------------------------------------------------ _ = aClk_E2E.stop() #------------------------------------------------------------------ print( "Distributed Computation time: " + str(t2_2 - t1_2)) print( "Distributed Experiment took: {0: > 16d} [us] End-2-End.".format( _ ) ) (位于'D 的顶部)是什么意思?

E表示提交'D'已通过git的rebase功能从原始E'D更改。因此,虽然它们可能最终会有相同的代码更改(除非存在冲突),但它们并不是完全相同的提交,正是因为它们至少会有E和{{{{{{ 1}}。在git中,具有不同历史的提交在设计上是不同的,并且它们将具有不同的哈希值。

  

二: 应该何时使用D(也与E相同?)

当结果被推送到已经是共享远程的分支时,&#34;共享&#34;这里的意思基本上是其他人已经检查出来并至少对其进行了本地更改(或者您不确定其他人是否已经这样做过)。

来自git docs

  

重新定位(或任何其他形式的重写)其他人根据其工作的分支是一个坏主意:下游的任何人都被迫手动修复其历史记录。