Maison >outils de développement >git >Git implémente l'annulation de la fusion et efface les fichiers locaux fusionnés

Git implémente l'annulation de la fusion et efface les fichiers locaux fusionnés

coldplay.xixi
coldplay.xixiavant
2020-12-10 17:29:396257parcourir

La colonne

tutoriel git présente comment effacer la fusion

Git implémente l'annulation de la fusion et efface les fichiers locaux fusionnés

Recommandé : tutoriel git

1. Allez droit au but

Solution
Méthode 1 : git reset --merge merge前的任何一次提交的hash串
Note 1 :

  • Si le l'espace de travail est après la fusion. Aucun changement, utilisez cette méthode avec audace.
  • Si l'espace de travail est modifié après la fusion, cette méthode réinitialisera toutes les modifications apportées à l'espace de travail À utiliser avec prudence. Toutefois, les modifications apportées à la zone de transit seront conservées.

Remarque 2 : Lorsque MERGE_HEAD est sur le commit actuel (c'est-à-dire lorsqu'une erreur ou un conflit survient lors de la fusion de branches, il y aura un "|MERGING" supplémentaire ensuite à la succursale) ) git merge --abortIdem que cette méthode
Méthode 2 :

git reset merge前的任何一次提交的hash串
git clean -n #预删除
#将预删除不想删除的文件加入.gitignore
git add .gitignore
git clean -f

2. Environnement de construction

Convention : Utiliser remote url au lieu de
pour l'URL de l'entrepôt distant 1. Développeur de simulation n°1

mkdir gitTest #新增文件夹gitTest
cd gitTest
git init
git remote add origin "remote url" 
echo "长太息以掩涕兮, 哀民生之多艰。" > lyrics.txt #新建 lyrics.txt 并在里面写入文字
git add lyrics.txt #将 lyrics.txt加入暂存区
git commit -m "lyrics.txt from user 1"
git push origin master
git checkout -b dev
git push origin dev:dev

2. 3. Développeur de simulation n°1

mkdir gitTest2
cd gitTest2
git clone "remote url" 
cd gitTest
echo "Don't make me suffer" > Suffer.txt
git add Suffer.txt
git commit -m "Suffer.txt from user2"
git push origin dev

3. Annuler la fusion

La situation à laquelle est confronté le développeur n°1

 : Le maître local a fusionné le contenu du développement distant, et il y avait un fichier Suffer.txt supplémentaire localement. Cependant, il s'est avéré que la mauvaise branche avait été fusionnée et l'opération de fusion a dû être annulée tout à l'heure. Mais des modifications ont été apportées aux fichiers locaux.

Afficher le fichier local actuel

  • ls

    <img src="https://img.php.cn/upload/image/270/754/732/1607592020999359.png" title="1607592020999359.png" alt="Git implémente lannulation de la fusion et efface les fichiers locaux fusionnés">Afficher la différence entre l'espace de travail et le référentiel

  • git diff HEAD

Git implémente lannulation de la fusion et efface les fichiers locaux fusionnésAfficher l'historique des commits

  • git log --oneline --graph

    Git implémente lannulation de la fusion et efface les fichiers locaux fusionnés

    Méthode de vérification 1

Retirer la fusion
ou exécuter
  • HEAD^ dans cet exemple est 7f811bf, à partir de l'historique de soumission ci-dessus, vous pouvez voir que 7f811bf est la chaîne de hachage soumise avant la fusion

    git reset --merge 7f811bfgit reset --merge HEAD^
    Afficher le fichier local

    et afficher le contenu du fichier
  • ls

    Git implémente lannulation de la fusion et efface les fichiers locaux fusionnés
    Voir à nouveau l'enregistrement de soumission

  • git log --oneline --graph

    Git implémente lannulation de la fusion et efface les fichiers locaux fusionnés
    Afficher

  • La différence entre l'espace de travail et la zone de préparation

      La différence entre l'espace de travail et le référentiel
    • git diff
    • Le différence entre la zone de transit et le référentiel
    • git diff HEAD
    • git diff --cached

      Git implémente lannulation de la fusion et efface les fichiers locaux fusionnés

    Résultat final :
  • Toutes les modifications du fichier local ont été réinitialisées (c'est-à-dire que le développeur a ajouté ce qui a été ajouté après la fusion - même si j'ai été très doué pour le réparer, il a été remplacé du jour au lendemain et supprimé), mais il y a toujours du contenu dans la zone de stockage temporaire. . Par conséquent, il y a des changements après la fusion de l'espace de travail
À utiliser avec prudence

Méthode de vérification deux


Rétracter la fusion
  • git reset 7f811bfAfficher à nouveau le fichier local actuel

  • ls

Git implémente lannulation de la fusion et efface les fichiers locaux fusionnés
Voir à nouveau le commit Enregistrer

  • git log --oneline --graph

    Git implémente lannulation de la fusion et efface les fichiers locaux fusionnés

    résultats de l'étape :
  • Il est évident que la fusion a été annulé, mais les fichiers fusionnés localement sont toujours là. Supprimez également le fichier fusionné redondant (Suffer.txt).

Avant de supprimer, vous pouvez d'abord voir quel contenu sera supprimé en effectuant l'opération de suppression (Pré-suppression

)
  • git clean -n
  • 注意:这里看到本地原来的文件 test.txt 也将被删除,这不是我所期望的。我只希望可以删除 meger 的文件。

  • 将 test.txt 文件加入 .gitignore 再执行预删除

echo test.txt > .gitignore
git add .gitignore
git clean -n

Git implémente lannulation de la fusion et efface les fichiers locaux fusionnés

阶段结果:可以看到将会被删除的文件只剩下 merge 的多余文件了。

  • 执行 删除操作 git clean -f
  • 最终结果

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer