Elles réinitialisent HEAD au cinquième commit dans le dépôt, puis fusionnent avec la branche principale.
HEAD de la branche actuelle est réinitialisé en arrière de cinq commits, puis les commits précédents sont écrasés en un seul commit.
Elles suppriment les cinq derniers commits.
Elles fusionnent les cinq derniers commits dans une nouvelle branche.
Explication :
git reset --hard HEAD~5 réinitialise la branche actuelle au commit juste avant les 5 derniers (voir man gitrevisions pour plus de détails sur cette notation et d'autres alternatives intéressantes comme HEAD@{2 days ago}). Comme il s'agit d'une réinitialisation dure, elle écrasera également tous les changements dans l'arborescence de travail. Voir man git-reset.
git merge --squash HEAD@{1} HEAD@{1} est là où la branche était juste avant la commande précédente (encore une fois, voir man gitrevisions). Cette commande configure l'état de l'index comme il le serait juste après une fusion à partir de ce commit. Toute cette opération pourrait être une manière de prendre 5 commits d'une branche dans laquelle vous avez commencé une nouvelle fonctionnalité et de les écraser en un seul commit, un commit significatif.
Q4. Votre projet actuel comporte plusieurs branches : master, beta et push-notifications. Vous venez de terminer la fonctionnalité de notification dans la branche push-notifications et vous souhaitez la valider dans la branche beta. Comment pouvez-vous y parvenir ?
Basculez sur la branche push-notifications et exécutez git merge beta.
Basculez sur la branche master et exécutez git merge beta -> push-notifications.
Supprimez la branche push-notifications et elle sera automatiquement validée dans la branche master.
Basculez sur la branche beta et exécutez git merge push-notifications.
Le commit est marqué pour une publication sur la branche feature-user-location.
Un commit est copié de sa branche d'origine vers la branche feature-user-location.
Le commit est sélectionné comme nouvelle tête de l'historique des commits.
Un commit est copié de la branche feature-user-location vers la branche master.
La branche est basculée sur la branche feature-user-location, et le commit spécifié est appliqué à la branche.
Explication :
'git checkout feature-user-location' bascule sur la branche 'feature-user-location'.
'git cherry-pick kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231' applique les modifications du commit spécifié ('kj2342134sdf090093f0sdgasdf99sdfo992mmmf9921231') à la branche actuelle (feature-user-location). Cela revient en fait à copier le commit de sa branche d'origine dans la branche feature-user-location.
Ainsi, cette séquence de commandes permet de cherry-pick un commit spécifique sur la branche feature-user-location.
Q8. Que fait la commande suivante dans le référentiel Git ?
git reset --soft HEAD^
Elle supprime tous les commits précédents et réinitialise l'historique du référentiel à son état initial.
Elle réinitialise la branche de travail au premier commit.
Elle maintient HEAD au commit actuel mais efface tous les commits précédents.
Elle positionne HEAD sur le commit précédent et laisse les modifications du commit annulé dans la zone de transit.
Q9. Vous trouvez un bogue dans votre projet, mais vous ne pouvez pas localiser où il a été introduit dans l'historique des commits. Comment diagnostiqueriez-vous ce
problème ?
Revenez manuellement en arrière dans votre historique des commits.
Utilisez git search -diff pour comparer tous les commits de l'historique de votre référentiel.
Exécutez un rebasage Git pour trouver le commit problématique.
Utilisez git bisect pour comparer le commit problématique à un commit antérieur qui fonctionne comme prévu.
A line starting with # serves as a comment. Hence # .swift does not do anything. See man gitignore.
Q17. After you make changes to a local repository, you run the following command. What will this do?
git commit -a -m "Refactor code base"
Nothing, you can't use multiple options in the same command
Adds all new files to the staging area
Commits all new files with a message
Adds all modified files to the staging area, then commits them with a message
Q18. After checking your git status you get the following output, which shows the file beta-notes.js in the commit but also unstaged. How can this situation occur?
Change to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: beta-notes.js
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout --<file>..." to discard changes in working directory)
modified: beta-notes.js
There were two copies of beta-notes.js but one was deleted
beta-notes.js was staged, then modified afterwards, creating two different versions of the file
Two copies of beta-notes.js were created, but only one is being tracked
There are two tracked copies of beta-notes.js, but one was removed from the commit
Note: - The command pull is fetch followed by either merge or rebase (in this case, merge). We don't want to merge. Merge would be an action to our repository. We just want to overwrite our local files.
Q21. Which statement is true when you use the git add -A command?
Only new files in the working directory are staged to the index.
All new and updated files from the working directory are staged to the index.
All files in the working directory are staged to the index in alphabetical order.
Only updated files in the working directory are staged to the index.
Q22. You find that your project has a tag and branch both named push-notifications, which causes confusion when trying to print out given reference. How can you specify which branch you want to look at?
Q29. What is the status of the beta-notes.js file in the following output?
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: beta-notes.js
beta-notes.js is untracked and has been modified.
beta-notes.js is a tracked file and has been modified, but has not been added to the current commit.
beta-notes.js is untracked but has been added to the current commit.
beta-notes.js is tracked, and the modified file has been added to the current commit.