我经常遇到的 Git 常见问题解答
Git 的功能远不止于代码的push/pull操作。在这篇文章中,我将讨论一些辅助命令和技巧,以应对我在团队协作中遇到的一些场景。这些问题也是我经常被 Git 新手问到的。
我假设您已经了解 Git 的斜杠push和pull分支概念。如果您不了解,请在评论区或私信告诉我,我会专门写一篇相关的文章。
1. 分支切换强制我在检出代码之前将更改提交到当前分支。但我现在不想提交更改。我该怎么办?
如果可以,您可以将当前的更改暂时保存(安全地存储起来),并轻松导航到另一个分支。
$ git stash
它不会暂存新添加的文件。通常情况下,切换到另一个分支时,新添加的文件不会造成任何问题。但是,如果您仍然不希望在分支切换后看到新添加的文件出现在更改列表中,您可以通过-U在上述命令中添加参数来暂存它们。
$ git stash -U
之后,每当您想要恢复更改时,请运行:
$ git stash pop
2. 如何删除/放弃所有未提交的更改?
$ git reset --hard
删除未跟踪的文件和目录 [2018 年 10 月 26 日添加]
$ git clean -d -f
3. 我不小心提交到了master不应该提交的分支上。该怎么办?
首先,请使用以下命令备份您在新分支中提交的内容,以免丢失更改:
$ git checkout -b new-branch-name
它会将master分支中的所有内容检出到目标分支new-branch-name。接下来,我们需要从目标分支中删除不必要的提交(因此需要进行更改)master。
首先,你需要查看日志,并获取你想要分支回滚到的Git 提交哈希值。可以把它想象成撤销操作。master
$ git log
commit be6bf5e001852e57bbc2c4e14054e3e539b6601c (HEAD -> master)
Author: Sanket Patel <3sanket3@gmail.com>
Date: Wed Sep 12 18:19:24 2018 +0530
another commit by mistake
commit f7169231dc4b729c97f69a877487cf2ddae54133
Author: Sanket Patel <3sanket3@gmail.com>
Date: Wed Sep 12 18:18:56 2018 +0530
commit by mistake
commit 9f6deced44efecb59f6d70283b8d0ba2d0a57550 <-- We want to restore at this point
Author: Sanket Patel <3sanket3@gmail.com>
Date: Wed Sep 12 18:18:26 2018 +0530
good commit
使用
pretty=onelineie(git log --pretty=oneline)可以去掉额外的细节,并将每个提交显示在一行中。
假设我们已经有了名为“good commit ie”的提交9f6deced44efecb59f6d70283b8d0ba2d0a57550,现在想要删除之后添加的另外两个提交。我们可以通过以下方式实现:
$ git reset --hard 9f6deced44efecb59f6d70283b8d0ba2d0a57550
它将删除本地中因错误而进行的提交和更改。
4. 我不小心将一些提交推送到了远程仓库。如何才能删除它们?
如上文第 3 点所述,我们应该首先备份并丢弃本地的提交。我们首先可能会想,直接执行 `git push` 能否同步我们在本地执行的丢弃操作?答案是否定的,因为本地现在比远程仓库落后。如果您直接运行 `git push` git push,它会抛出错误并要求您先执行 `git git pullpush`。因此,我们必须强制远程仓库接受我们的推送并丢弃远程仓库中所有其他更改。
⚠️ 注意:强制推送代码之前,务必确保远程分支中没有需要保留(而非丢弃)的提交。如果其他团队成员也在同一分支上工作,建议在执行此操作前与他们沟通。
$ git push origin +my-branch
在分支名称前添加前缀+会强制推送您的更改。这也意味着,它会丢弃您在本地删除的提交。
5. 在将任何分支合并到我的分支之前,我想先查看更改。
$ git merge others-branch-name --no-commit --no-ff
这会尝试将更改合并others-branch-name到您的分支,但不会提交。这样您就有机会查看合并后您的分支会是什么样子。您可以手动查看并提交合并。
6. 我想重命名该目录
$ git mv old-name new-name
如果要更改现有目录名称的大小写,则必须使用临时目录交换它们,如下所示:
$ git mv DirectoryName temp
$ git mv temp directory-name
祝你购物愉快!:)
校对:@ron4ex
文章来源:https://dev.to/3sanket3/git-faqs-i-encounter-regularly-433l