Maison  >  Article  >  Java  >  Notes diverses sur l'utilisation de git

Notes diverses sur l'utilisation de git

高洛峰
高洛峰original
2017-02-09 09:31:401062parcourir

Avant-propos

En tant que développeur, si vous ne connaissez pas git ou ne pouvez pas encore utiliser git, alors vous devriez y réfléchir. Allez lire vous-même l’introduction introductive. Aujourd'hui, je viens de vous présenter quelques commandes courantes que j'utilise git dans ma vie quotidienne et les commandes que je pense bonnes et qui peuvent améliorer l'efficacité de notre bureau. Le contenu est peut-être un peu brouillon, mais ce sont définitivement des commandes classiques. Je prends des notes ici et j'espère qu'elles pourront aider ceux d'entre vous qui m'apprécieront.

Zone

Avant cela, présentons les trois zones du git

  • répertoire de travail (répertoire de travail)

  • Zone de transit (index des étapes)

  • Zone d'histoire locale (histoire)

Vous pouvez le faire à travers une image Comprendre le conversion entre eux d’une manière concise et facile à comprendre.

git使用杂记

clone

Commençons par la commande clone Quiconque a utilisé git le sait. git colneCommande pour extraire le référentiel distant en local. Mais lorsque nous voulons le extraire dans le dossier spécifié, vous pouvez directement mkdir En fait, ce n'est pas nécessaire, une seule commande peut le faire git clone 远程仓库 文件名, c'est tellement simple.

rm

Nous pouvons rencontrer une telle situation au travail. Nous utilisons git add . pour ajouter directement tous les fichiers modifiés dans l'espace de travail à la zone de stockage temporaire, mais plus tard nous constatons qu'il y a des Do ne pas ajouter de fichier en premier. À ce stade, nous pouvons utiliser la commande suivante pour renvoyer le fichier dans l'espace de travail.

git rm --cached <file>

stash

Il existe une situation où lorsque vous développez, il y a une urgence en ligne bug qui doit être corrigée, et la fonction en cours de développement n'est pas terminée à ce stade Si vous ne souhaitez pas soumettre, vous pouvez utiliser git stash pour stocker tous les fichiers dans l'espace de travail. À ce stade, vous pouvez couper la branche et réparer en toute sécurité bug Une fois la réparation terminée, exécutez git stash pop pour retirer celles précédemment stockées. Bien sûr, il existe également d'autres commandes associées telles que : git stash list. Afficher les enregistrements stockés, git stash drop Supprimer les enregistrements stockés.

tag

Peut-être que pendant le développement, nous devrons baliser git tag tagName et pousser la balise correspondante vers l'entrepôt distant. Dans ce cas, vous pouvez utiliser la commande suivante pour pousser.

git push --tags tagName

modifier

Après votre commit, vous constatez qu'un fichier n'a pas été ajouté au dernier commit, ou que certains fichiers ont été modifiés. Vous ne souhaitez pas ajouter de nouvelles informations commit pour le moment, vous souhaitez simplement les ajouter aux dernières commit. À ce moment, vous pouvez utiliser

git commit --amend <file>

pour ajouter des fichiers dans la zone de stockage temporaire, et vous pouvez également modifier les informations commit à ce moment.

réinitialisation

reset peut également obtenir l'effet du rm précédent. Vous pouvez utiliser la commande suivante pour remplacer la commande git rm --cached <file> précédente

git reset HEAD <file>
mais

a un plus large éventail d'utilisations. Combiné avec les paramètres reset, vous pouvez vous retirer vers n'importe quel nœud soft pour fonctionner commit

git reset --soft index
Après avoir exécuté cette commande, vous reviendrez à. l'emplacement

et l'espace de travail reste inchangé. La zone de stockage temporaire revient à l'emplacement index actuel. Il existe également un paramètre index. hard

git reset --hard index
et

peuvent être considérés comme opposés. Son effet réside dans la différence entre la zone de travail et la zone de stockage temporaire. Il dégagera ces deux zones. soft

rebase

pour

signifie redirection S'il y a une différence dans les informations entre votre branche actuelle et la branche distante rebase, il vous sera rappelé que vous ne pouvez pas continuer pour le moment. commit , vous devez d'abord extraire les informations push distantes vers les informations locales avant de pouvoir les soumettre. Dans ce cas, vous pouvez utiliser la commande commit. Comme indiqué ci-dessous, nous sommes actuellement dans la branche rebase develop

git使用杂记

À ce stade, nous devons d'abord exécuter la commande

rebase

et puis enfin
git fetch
git rebase origin/master
Vers la télécommande

pushmaster

la situation finale de chaque branche est comme indiqué sur l'image ci-dessus. Si vous trouvez la commande difficile à retenir, vous pouvez également utiliser une commande pour obtenir l'effet ci-dessus
git push origin master

Il s'agit d'une application simple de
git pull --rebase origin master
et c'est aussi une commande courante. Ce qui suit présente un paramètre facultatif

de rebase. rebase--onto--onto

Scénario d'utilisation : Pendant le processus de développement, nous créerons différentes branches pour développer différentes fonctions lorsque vous créez une nouvelle branche

sur la branche

pour le développement. Fonction et a également soumis quelques A, à ce moment vous constatez qu'il y a un B incorrect sur la branche commit d'origine. Si vous souhaitez A être ajouté à commit, vous ne pouvez pas inclure ce aussi supérieur. C'est le moment de rebase montrer vos pouvoirs magiques. master

git使用杂记

当前处在B分支,要得到上面的结果,只需执行如下命令

git rebase --onto master <b的commit hash code> B

这个不仅可以针对不同的分支,也能作用于同一个分支上。所以针对上面的情况可以只对分支B进行操作,等价命令如下:

git rebase --onto <a的commit hash code> <b的commit hash code> B

--interactive

当我们要修改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

相信branch都很熟悉,我这里要说的是他的另一种可能会用到的情况。场景是这样的:如果在你进行创建新的分支时,并不想从当前的commit信息节点进行创建分支。

git使用杂记

要实现如上效果只需在创建分支时在后面再添加额外的参数,该参数就是你所需调到的commit节点的hash code

git branch new_branch <commit hash code>

push

这里提一下push--set-upstream,它的效果是设置上游分支,当我们将远程不存在的本地分支推送到远程时,如果不在推送的分支上,我们一般会使用如下命令进行推送。

git checkout push_branch
git push origin push_branch

下面是简洁的方法,使用该参数无需切换分支,可以直接使用如下命令进行推送。

git push --set-upstream origin push_branch

cherry-pick

这个命令的场景是:当你所在的分支没用,你要删除它,但其中的一个commit你还是想推送到远程master上。

git使用杂记

将分支切换到master,执行以下命令:

git cherry-pick <b的 commit hash code>

merge

我们所熟知的是使用merge来进行分支的合并,每次使用merge时都会自动将副分支合并成一个commit进行推送到主分支上,那么如果我不想它自动推送到主分支上时(可能我还需要进行修改),这时就可以使用--squash操作

git merge --squash dev_branch

执行完以上命令后,我们就可以在暂存区看到一个还未提交的文件状态。

reflog

当我们切分支太频繁了之后,可能会忘了一些分支是从哪个分支切过来的,此时可以使用如下命令查看:

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)

通过一张图就能简洁易懂的明白它们之间的转化。

git使用杂记

clone

sera introduit en premier avec la commande clone Quiconque a utilisé git le saura. git colneCommande pour extraire le référentiel distant en local. Mais lorsque nous voulons le extraire dans le dossier spécifié, vous pouvez directement mkdir En fait, ce n'est pas nécessaire, une seule commande peut le faire git clone 远程仓库 文件名, c'est tellement simple.

rm

Nous pouvons rencontrer une telle situation au travail. Nous utilisons git add . pour ajouter directement tous les fichiers modifiés dans l'espace de travail à la zone de stockage temporaire, mais plus tard nous constatons qu'il y a des Do ne pas ajouter de fichier en premier. À ce stade, nous pouvons utiliser la commande suivante pour renvoyer le fichier dans l'espace de travail.

git rm --cached <file>

stash

Il existe une situation où lorsque vous développez, il y a une urgence en ligne bug qui doit être corrigée, et la fonction en cours de développement n'est pas terminée à ce stade Si vous ne souhaitez pas soumettre, vous pouvez utiliser git stash pour stocker tous les fichiers dans l'espace de travail. À ce stade, vous pouvez couper la branche et réparer en toute sécurité bug Une fois la réparation terminée, exécutez git stash pop pour retirer celles précédemment stockées. Bien sûr, il existe également d'autres commandes associées telles que : git stash list. Afficher les enregistrements stockés, git stash drop Supprimer les enregistrements stockés.

tag

Peut-être que pendant le développement, nous devrons baliser git tag tagName et pousser la balise correspondante vers l'entrepôt distant. Dans ce cas, vous pouvez utiliser la commande suivante pour pousser.

git push --tags tagName

modifier

Après votre commit, vous constatez qu'un fichier n'a pas été ajouté au dernier commit, ou que certains fichiers ont été modifiés. Vous ne souhaitez pas ajouter de nouvelles informations commit pour le moment, vous souhaitez simplement les ajouter aux dernières commit. À ce moment, vous pouvez utiliser

git commit --amend <file>

pour ajouter des fichiers dans la zone de stockage temporaire, et vous pouvez également modifier les informations commit à ce moment.

réinitialisation

reset peut également obtenir l'effet du rm précédent. Vous pouvez utiliser la commande suivante pour remplacer la commande git rm --cached <file> précédente

git reset HEAD <file>
mais

a un plus large éventail d'utilisations. Combiné avec les paramètres reset, vous pouvez vous retirer vers n'importe quel nœud soft pour fonctionner commit

git reset --soft index
Après avoir exécuté cette commande, vous reviendrez à. l'emplacement

et l'espace de travail reste inchangé. La zone de stockage temporaire revient à l'emplacement index actuel. Il existe également un paramètre index. hard

git reset --hard index
et

peuvent être considérés comme opposés. Son effet réside dans la différence entre la zone de travail et la zone de stockage temporaire. Il dégagera ces deux zones. soft

rebase

pour

signifie redirection S'il y a une différence dans les informations entre votre branche actuelle et la branche distante rebase, il vous sera rappelé que vous ne pouvez pas continuer pour le moment. commit , vous devez d'abord extraire les informations push distantes vers les informations locales avant de pouvoir les soumettre. Dans ce cas, vous pouvez utiliser la commande commit. Comme indiqué ci-dessous, nous sommes actuellement dans la branche rebase develop

git使用杂记

À ce stade, nous devons d'abord exécuter la commande

rebase

et puis enfin
git fetch
git rebase origin/master
Vers la télécommande

pushmaster

la situation finale de chaque branche est comme indiqué sur l'image ci-dessus. Si vous trouvez la commande difficile à retenir, vous pouvez également utiliser une commande pour obtenir l'effet ci-dessus
git push origin master

Il s'agit d'une application simple de
git pull --rebase origin master
et c'est aussi une commande courante. Ce qui suit présente un paramètre facultatif

de rebase. rebase--onto--onto

Scénario d'utilisation : Pendant le processus de développement, nous créerons différentes branches pour développer différentes fonctions lorsque vous créez une nouvelle branche

sur la branche

pour le développement. Fonction et a également soumis quelques A, à ce moment vous constatez qu'il y a un B incorrect sur la branche commit d'origine. Si vous souhaitez A être ajouté à commit, vous ne pouvez pas inclure ce aussi supérieur. C'est le moment de rebase montrer vos pouvoirs magiques. mastercommit--onto

est actuellement dans la branche git使用杂记 Pour obtenir les résultats ci-dessus, exécutez simplement la commande suivante

B Cela peut non seulement cibler différents. branches , peut également agir sur la même branche. Par conséquent, pour la situation ci-dessus, nous ne pouvons opérer que sur la branche

La commande équivalente est la suivante :
git rebase --onto master <b的commit hash code> B

B--interactive

git rebase --onto <a的commit hash code> <b的commit hash code> B
Quand on veut modifier le nom. des informations

, Si le

à modifier est le premier, vous pouvez utiliser

commitcommit Si ce n'est pas le premier, nous devons utiliser le

facultatif. paramètre de
git commit --amend
C'est tout. L'abréviation est

. Le rebase après le paramètre --interactive-i

est celui avant le
git rebase -i <commit hash code>
qui doit être modifié. Après l'exécution, un message similaire au suivant apparaîtra :

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

相信branch都很熟悉,我这里要说的是他的另一种可能会用到的情况。场景是这样的:如果在你进行创建新的分支时,并不想从当前的commit信息节点进行创建分支。

git使用杂记

要实现如上效果只需在创建分支时在后面再添加额外的参数,该参数就是你所需调到的commit节点的hash code

git branch new_branch <commit hash code>

push

这里提一下push--set-upstream,它的效果是设置上游分支,当我们将远程不存在的本地分支推送到远程时,如果不在推送的分支上,我们一般会使用如下命令进行推送。

git checkout push_branch
git push origin push_branch

下面是简洁的方法,使用该参数无需切换分支,可以直接使用如下命令进行推送。

git push --set-upstream origin push_branch

cherry-pick

这个命令的场景是:当你所在的分支没用,你要删除它,但其中的一个commit你还是想推送到远程master上。

git使用杂记

将分支切换到master,执行以下命令:

git cherry-pick <b的 commit hash code>

merge

我们所熟知的是使用merge来进行分支的合并,每次使用merge时都会自动将副分支合并成一个commit进行推送到主分支上,那么如果我不想它自动推送到主分支上时(可能我还需要进行修改),这时就可以使用--squash操作

git merge --squash dev_branch

执行完以上命令后,我们就可以在暂存区看到一个还未提交的文件状态。

reflog

当我们切分支太频繁了之后,可能会忘了一些分支是从哪个分支切过来的,此时可以使用如下命令查看:

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中文网!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn