📜  常见的 Git 问题及其修复

📅  最后修改于: 2021-10-24 12:50:52             🧑  作者: Mango

众所周知,Git 是一个免费的开源版本控制系统。现在 git 被广泛使用,因此本文重点介绍一些常见的 git 技巧,每个人在某个时间点使用 git 或 Github 时都需要这些技巧。有时用户在使用 Git 时会犯一些错误,导致信息丢失或添加错误信息。

为了克服这个问题,Git 提供了一些方法/技巧来回滚或修改错误或错误所做的更改。下面列出了其中一些问题及其修复方法:

编辑提交消息

有时在编写提交消息时,我们会输入错误。以下命令可用于解决此问题。请注意,以下命令会创建一个新提交,因此请避免使用 –amend 来修改已推送到中央存储库的提交。

git commit --amend            // start the editor to edit message
git commit --amend -m"New message"    // edit the commit message directly

正常提交

修改提交

如果您在 git add 时忘记添加文件,那么只需添加它并修改之前的提交。

git add forgotten_file_name
git commit --amend

在推送之前清理本地提交

–amend 对于编辑提交消息非常有用,但如果您要执行的提交不是最后一次提交,则它将不起作用。在这种情况下,使用rebase

git rebase --interactive 

// if you didn't specify any tracking information for this branch,
// add upstream and remote branch information:
git rebase --interactive origin branch

这将提供以下菜单:

您将看到一个选项列表,您可以使用这些选项进入可以编辑消息的视图。然而,从上面的清单可以看出,交互式 rebase 提供的不仅仅是简单的提交消息编辑:您可以通过从列表中删除提交来完全删除提交,以及编辑、重新排序和压缩它们。 Squashing 允许您将多个提交合并为一个,然后再将它们推送到远程。

撤销本地提交

有时我们意识到存在一些错误/错误,但到那时,一些更改已在本地提交。

git reset HEAD-2        // undo last 2 commits and keep changes
git reset --hard HEAD-2        // undo last two Commits,discard changes

从 GIT 中删除文件而不从文件系统中删除

如果你不小心,你可能会在 git add 过程中添加一些不必要的文件。

如果您尝试使用git rm,它将从暂存区和文件系统中删除文件。

git reset filename          // or git remove --cached filename
echo filename >> .gitignore // add it to .gitignore to avoid re-adding it

此命令仅删除暂存版本并将文件添加到您的 . gitignore以避免再次犯同样的错误。

恢复推送提交

有时即使在修改和变基之后,错误的提交也会将其放入中央存储库。因此,您可以使用以下命令

git revert c761f5c              // reverts the commit with the specified id
 git revert HEAD^                // reverts the second to last commit
 git revert develop~4..develop~2  // reverts a whole range of commits

但是,如果您不想创建额外的还原提交而只想将必要的更改应用于您的工作树,您可以使用–no-commit/-n选项。

git revert -n HEAD

避免重复合并冲突

反复修复合并冲突真的很麻烦。

假设您的团队同时在多个功能分支上工作。现在您想将所有这些合并在一起。有几个合并冲突,您可以解决这些冲突。但事实证明,其中一个分支还没有完全存在,因此您决定再次取消合并它。几天后,当分支最终准备好时,您再次合并它,但是由于记录的解决方案,您将不必再次解决相同的合并冲突。

// Add it to your global config to enable it for all projects
git config --global rerere.enabled true

查找在合并后破坏某些内容的提交

有时需要找到错误更改项目的提交。这种糟糕的提交很难找到,因此会消耗大量时间。 Git 引入了一种方法来查找此提交,该方法在合并后破坏了某些内容:

git bisect start         // starts the bisecting session
 git bisect bad           // marks the current revision as bad
 git bisect good revision  // marks the last known good revision
 
 Now, git will automatically checkout a revision halfway between the known “good” and “bad” versions.
 git bisect good  // OR git bisect bad