Wenn Sie als Entwickler git
nicht kennen oder git
noch nicht nutzen können, dann sollten Sie darüber nachdenken. Lesen Sie selbst die Einführung. Heute stelle ich nur einige häufig verwendete Befehle vor, die ich git
in meinem täglichen Leben verwende, und die Befehle, die meiner Meinung nach gut sind und die Effizienz unseres Büros verbessern können. Der Inhalt mag etwas chaotisch sein, aber es handelt sich definitiv um klassische Befehle. Ich mache mir hier Notizen und hoffe, dass sie denjenigen von Ihnen helfen können, die mich schätzen lernen.
Davor stellen wir die drei Bereiche des git
Arbeitsverzeichnis (Arbeitsverzeichnis)
. Jeder, der clone
verwendet hat, weiß es. git
Befehl zum Pullen des Remote-Repositorys auf lokal. Aber wenn wir es in den angegebenen Ordner ziehen möchten, können Sie es direkt git colne
tun. Tatsächlich ist es nicht nötig, dies zu tun, ein Befehl kann es tun mkdir
, es ist so einfach. git clone 远程仓库 文件名
, um alle geänderten Dateien im Arbeitsbereich direkt zum temporären Speicherbereich hinzuzufügen, aber später stellen wir fest, dass dies der Fall ist Fügen Sie zunächst keine Datei hinzu. Zu diesem Zeitpunkt können wir den folgenden Befehl verwenden, um die Datei in den Arbeitsbereich zurückzugeben. git add .
git rm --cached <file>
, der behoben werden muss, und die in der Entwicklung befindliche Funktion ist zu diesem Zeitpunkt noch nicht abgeschlossen Wenn Sie nicht senden möchten, können Sie alle Dateien mit bug
im Arbeitsbereich speichern. Zu diesem Zeitpunkt können Sie den Zweig sicher abschneiden und reparieren git stash
. Nachdem die Reparatur abgeschlossen ist, führen Sie bug
aus, um die zuvor gespeicherten Befehle zu entfernen, wie zum Beispiel: git stash pop
Sehen Sie sich die gespeicherten Datensätze an, git stash list
Gespeicherte Datensätze verwerfen. git stash drop
erstellen und das entsprechende Tag in das Remote-Warehouse übertragen. In diesem Fall können Sie den folgenden Befehl zum Pushen verwenden. git tag tagName
git push --tags tagName
ausgeführt haben, stellen Sie fest, dass eine Datei nicht zum letzten commit
hinzugefügt wurde oder dass einige Dateien geändert wurden. Sie möchten zu diesem Zeitpunkt keine neuen commit
Informationen hinzufügen, sondern diese nur zu den letzten commit
hinzufügen. Zu diesem Zeitpunkt können Sie commit
git commit --amend <file>
-Informationen ändern. commit
kann auch den Effekt des vorherigen reset
erzielen. Sie können den folgenden Befehl verwenden, um den vorherigen rm
-Befehl git rm --cached <file>
git reset HEAD <file>
-Parameter können Sie zu jedem reset
-Knoten zurückkehren. soft
commit
git reset --soft index
-Speicherort zurück. Es gibt auch einen index
-Parameter. Man kann sagen, dass index
hard
git reset --hard index
soft
rebase
gibt, werden Sie daran erinnert, dass Sie zu diesem Zeitpunkt nicht fortfahren können rebase
, Sie müssen zuerst die Remote-commit
Informationen auf die lokale übertragen, bevor Sie sie übermitteln können. In diesem Fall können Sie den Befehl push
verwenden. Wie unten gezeigt, befinden wir uns derzeit im Zweig commit
rebase
develop
. Zu diesem Zeitpunkt sollten wir zuerst den Befehl
und dann schließlich rebase
Zur Fernbedienung
git fetch git rebase origin/master
push
Die endgültige Situation jedes Zweigs ist wie im Bild oben dargestellt. Wenn Sie Schwierigkeiten haben, sich den Befehl zu merken, können Sie auch einen einzigen Befehl verwenden, um den oben genannten Effekt zu erzielen master
git push origin master
und es ist auch ein allgemeiner Befehl. Nachfolgend wird ein optionaler Parameter
vongit pull --rebase origin master
rebase
--ontorebase
--onto
Verwendungsszenario: Während des Entwicklungsprozesses erstellen wir verschiedene Zweige, um verschiedene Funktionen zu entwickeln. Wenn Sie einen neuen Zweig
im ursprünglichen A
-Zweig gibt. Wenn Sie B
zu commit
hinzugefügt werden möchten, können Sie dieses falsche auch überlegen. Dies ist die Zeit, A
Ihre magischen Kräfte zur Schau zu stellen. commit
当前处在B
分支,要得到上面的结果,只需执行如下命令
git rebase --onto master <b的commit hash code> B
这个不仅可以针对不同的分支,也能作用于同一个分支上。所以针对上面的情况可以只对分支B
进行操作,等价命令如下:
git rebase --onto <a的commit hash code> <b的commit hash code> B
当我们要修改commit
信息的名称时,如果要修改的commit
处在第一个时,可以使用
git commit --amend
如果不是第一个时,我们就要使用到rebase
的--interactive
可选参数了,可以简写为-i
。
git rebase -i <commit hash code>
参数后面的commit hash code
为需要修改的commit
的前一个。执行之后就会出现如下类似的信息:
pick 137cf0a First coommit pick 163dc38 Second commit # Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s)) # # 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 # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
根据提示我们可以有6
个可选择的操作。相信提示已经说的很明显了,对于我们这种要修改First coommit
的情况,需要使用r
。
r 137cf0a First commit pick 163dc38 Second commit
执行之后会跳到修该First coomit
的界面,进行修改即可。
First commit # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Thu Jan 26 23:07:10 2017 +0800 # # rebase in progress; onto f9aee6e # You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'. # # Changes to be committed: # new file: file1
至于其他的操作项,有兴趣的可以自己去尝试一下。例如s
操作就可以用来合并commit
。
相信branch
都很熟悉,我这里要说的是他的另一种可能会用到的情况。场景是这样的:如果在你进行创建新的分支时,并不想从当前的commit
信息节点进行创建分支。
要实现如上效果只需在创建分支时在后面再添加额外的参数,该参数就是你所需调到的commit
节点的hash code
git branch new_branch <commit hash code>
这里提一下push
的--set-upstream
,它的效果是设置上游分支,当我们将远程不存在的本地分支推送到远程时,如果不在推送的分支上,我们一般会使用如下命令进行推送。
git checkout push_branch git push origin push_branch
下面是简洁的方法,使用该参数无需切换分支,可以直接使用如下命令进行推送。
git push --set-upstream origin push_branch
这个命令的场景是:当你所在的分支没用,你要删除它,但其中的一个commit
你还是想推送到远程master
上。
将分支切换到master
,执行以下命令:
git cherry-pick <b的 commit hash code>
我们所熟知的是使用merge
来进行分支的合并,每次使用merge
时都会自动将副分支合并成一个commit
进行推送到主分支上,那么如果我不想它自动推送到主分支上时(可能我还需要进行修改),这时就可以使用--squash
操作
git merge --squash dev_branch
执行完以上命令后,我们就可以在暂存区看到一个还未提交的文件状态。
当我们切分支太频繁了之后,可能会忘了一些分支是从哪个分支切过来的,此时可以使用如下命令查看:
git reflog
894a16d HEAD@{0}: commit: commit another todo 6876e5b HEAD@{1}: checkout: moving from solve_world_hunger to kill_the_batman 324336a HEAD@{2}: commit: commit todo 6876e5b HEAD@{3}: checkout: moving from blowup_sun_for_ransom to solve_world_hunger 6876e5b HEAD@{4}: checkout: moving from kill_the_batman to blowup_sun_for_ransom 6876e5b HEAD@{5}: checkout: moving from cure_common_cold to kill_the_batman 6876e5b HEAD@{6}: commit (initial): initial commit
这样我们就可以看到所用的操作历史了。这样如果我们使用git reset
命令不小心删除了需要的东西。可以通过此来查找到删除操作的hash code
,之后就可以通过如下命令进行恢复。
git checkout <hash code>
目前想到的就这些了,希望能有所帮助
个人博客:http://www.php.cn/
作为一个开发者,如果现在还不知道git
或者还不会使用git
,那么你应该好好的反省。自己去好好看一遍的入门介绍吧。今天只是对自己在日常中使用git
的一些常用命令的介绍与自己认为不错且能提高我们办公效率的命令。内容可能会有点杂乱,但绝对都是经典的命令,在此记下笔记,也希望能帮助来赏脸关顾的你们。
在这之前,来介绍一下git
的三个区域
工作区(working directory)
暂存区(stage index)
本地历史区(history)
通过一张图就能简洁易懂的明白它们之间的转化。
wird zuerst mit dem Befehl clone
eingeführt. Jeder, der git
verwendet hat, wird es wissen. git colne
Befehl zum Pullen des Remote-Repositorys auf lokal. Aber wenn wir es in den angegebenen Ordner ziehen möchten, können Sie es direkt mkdir
tun. Tatsächlich ist es nicht nötig, dies zu tun, ein Befehl kann es tun git clone 远程仓库 文件名
, es ist so einfach.
Eine solche Situation kann bei der Arbeit auftreten. Wir verwenden git add .
, um alle geänderten Dateien im Arbeitsbereich direkt zum temporären Speicherbereich hinzuzufügen, aber später stellen wir fest, dass dies der Fall ist Fügen Sie zunächst keine Datei hinzu. Zu diesem Zeitpunkt können wir den folgenden Befehl verwenden, um die Datei in den Arbeitsbereich zurückzugeben.
git rm --cached <file>
Während der Entwicklung kommt es zu einem Online-Notfall bug
, der behoben werden muss, und die in der Entwicklung befindliche Funktion ist zu diesem Zeitpunkt noch nicht abgeschlossen Wenn Sie nicht senden möchten, können Sie alle Dateien mit git stash
im Arbeitsbereich speichern. Zu diesem Zeitpunkt können Sie den Zweig sicher abschneiden und reparieren bug
. Nachdem die Reparatur abgeschlossen ist, führen Sie git stash pop
aus, um die zuvor gespeicherten Befehle zu entfernen, wie zum Beispiel: git stash list
Sehen Sie sich die gespeicherten Datensätze an, git stash drop
Gespeicherte Datensätze verwerfen.
Vielleicht müssen wir während der Entwicklung ein Tag git tag tagName
erstellen und das entsprechende Tag in das Remote-Warehouse übertragen. In diesem Fall können Sie den folgenden Befehl zum Pushen verwenden.
git push --tags tagName
Nachdem Sie commit
ausgeführt haben, stellen Sie fest, dass eine Datei nicht zum letzten commit
hinzugefügt wurde oder dass einige Dateien geändert wurden. Sie möchten zu diesem Zeitpunkt keine neuen commit
Informationen hinzufügen, sondern diese nur zu den letzten commit
hinzufügen. Zu diesem Zeitpunkt können Sie
git commit --amend <file>
verwenden, um Dateien zum temporären Speicherbereich hinzuzufügen, und Sie können zu diesem Zeitpunkt auch die commit
-Informationen ändern.
reset
kann auch den Effekt des vorherigen rm
erzielen. Sie können den folgenden Befehl verwenden, um den vorherigen git rm --cached <file>
-Befehl
git reset HEAD <file>
hat einen breiteren Anwendungsbereich. In Kombination mit dem reset
-Parameter können Sie zu jedem soft
-Knoten zurückkehren. commit
git reset --soft index
-Speicherort und der Arbeitsbereich bleibt unverändert. Der temporäre Speicherbereich kehrt zum aktuellen index
-Speicherort zurück. Es gibt auch einen index
-Parameter. Man kann sagen, dass hard
git reset --hard index
Gegensätze sind. Ihre Wirkung liegt in der Differenz zwischen dem Arbeitsbereich und dem temporären Speicherbereich. soft
bedeutet Umleitung. Wenn es einen Unterschied in den Informationen zwischen Ihrem aktuellen Zweig und dem entfernten Zweig rebase
gibt, werden Sie daran erinnert, dass Sie zu diesem Zeitpunkt nicht fortfahren können commit
, Sie müssen zuerst die Remote-push
Informationen auf die lokale übertragen, bevor Sie sie übermitteln können. In diesem Fall können Sie den Befehl commit
verwenden. Wie unten gezeigt, befinden wir uns derzeit im Zweig rebase
develop
. Zu diesem Zeitpunkt sollten wir zuerst den Befehl
rebase
und dann schließlich
git fetch git rebase origin/master
push
master
Die endgültige Situation jedes Zweigs ist wie im Bild oben dargestellt. Wenn Sie Schwierigkeiten haben, sich den Befehl zu merken, können Sie auch einen einzigen Befehl verwenden, um den oben genannten Effekt zu erzielen
git push origin master
Dies ist eine einfache Anwendung von
und es ist auch ein allgemeiner Befehl. Nachfolgend wird ein optionaler Parametergit pull --rebase origin master
vorgestellt. rebase
rebase
--onto--onto
übermittelt, zu diesem Zeitpunkt stellen Sie fest, dass es ein falsches A
im ursprünglichen B
-Zweig gibt. Wenn Sie commit
zu A
hinzugefügt werden möchten, können Sie dieses falsche auch überlegen. Dies ist die Zeit, commit
Ihre magischen Kräfte zur Schau zu stellen. rebase
master
commit
--onto
Um die oben genannten Ergebnisse zu erhalten, führen Sie einfach den folgenden Befehl aus:
Dies kann nicht nur auf andere zielen Zweige können auch auf denselben Zweig wirken. Daher können wir in der oben genannten Situation nur den Zweig B
bearbeiten. Der entsprechende Befehl lautet wie folgt:
git rebase --onto master <b的commit hash code> B
--interactiveB
git rebase --onto <a的commit hash code> <b的commit hash code> B
commit
verwenden. Wenn es nicht das erste ist, müssen wir das optionale commit
verwenden Parameter von
git commit --amend
nach dem rebase
--interactive
-i
-Parameter ist derjenige vor dem
git rebase -i <commit hash code>
pick 137cf0a First coommit pick 163dc38 Second commit # Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s)) # # 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 # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
根据提示我们可以有6
个可选择的操作。相信提示已经说的很明显了,对于我们这种要修改First coommit
的情况,需要使用r
。
r 137cf0a First commit pick 163dc38 Second commit
执行之后会跳到修该First coomit
的界面,进行修改即可。
First commit # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Thu Jan 26 23:07:10 2017 +0800 # # rebase in progress; onto f9aee6e # You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'. # # Changes to be committed: # new file: file1
至于其他的操作项,有兴趣的可以自己去尝试一下。例如s
操作就可以用来合并commit
。
相信branch
都很熟悉,我这里要说的是他的另一种可能会用到的情况。场景是这样的:如果在你进行创建新的分支时,并不想从当前的commit
信息节点进行创建分支。
要实现如上效果只需在创建分支时在后面再添加额外的参数,该参数就是你所需调到的commit
节点的hash code
git branch new_branch <commit hash code>
这里提一下push
的--set-upstream
,它的效果是设置上游分支,当我们将远程不存在的本地分支推送到远程时,如果不在推送的分支上,我们一般会使用如下命令进行推送。
git checkout push_branch git push origin push_branch
下面是简洁的方法,使用该参数无需切换分支,可以直接使用如下命令进行推送。
git push --set-upstream origin push_branch
这个命令的场景是:当你所在的分支没用,你要删除它,但其中的一个commit
你还是想推送到远程master
上。
将分支切换到master
,执行以下命令:
git cherry-pick <b的 commit hash code>
我们所熟知的是使用merge
来进行分支的合并,每次使用merge
时都会自动将副分支合并成一个commit
进行推送到主分支上,那么如果我不想它自动推送到主分支上时(可能我还需要进行修改),这时就可以使用--squash
操作
git merge --squash dev_branch
执行完以上命令后,我们就可以在暂存区看到一个还未提交的文件状态。
当我们切分支太频繁了之后,可能会忘了一些分支是从哪个分支切过来的,此时可以使用如下命令查看:
git reflog
894a16d HEAD@{0}: commit: commit another todo 6876e5b HEAD@{1}: checkout: moving from solve_world_hunger to kill_the_batman 324336a HEAD@{2}: commit: commit todo 6876e5b HEAD@{3}: checkout: moving from blowup_sun_for_ransom to solve_world_hunger 6876e5b HEAD@{4}: checkout: moving from kill_the_batman to blowup_sun_for_ransom 6876e5b HEAD@{5}: checkout: moving from cure_common_cold to kill_the_batman 6876e5b HEAD@{6}: commit (initial): initial commit
这样我们就可以看到所用的操作历史了。这样如果我们使用git reset
命令不小心删除了需要的东西。可以通过此来查找到删除操作的hash code
,之后就可以通过如下命令进行恢复。
git checkout <hash code>
目前想到的就这些了,希望能有所帮助
更多git使用杂记 相关文章请关注PHP中文网!