点击上方"什么技术值得学",关注获得更多资料


前提


你知道git工作流的基本知识,熟悉一些基本的命令,如add,commit,push,pull,那么这篇文章可能适合你。这篇文章主要关注日常git使用改进,修复一些常见错误,以及迈向提升git学习者的一步。



#add


您只想在暂存区域中添加具有特定扩展名的文件。当然,您可以逐个添加所有文件。但您可以使用*。<extension_name>来包含具有该扩展名的所有文件。以下命令将添加所有python文件。


git add * .py


您想要添加具有特定扩展名的文件,并且还想指定目录名,然后您可以运行以下命令。以下命令将添加目录子目录中的所有python文件。


git add model / \ * .py



#clean


您在分支中创建了一些新文件或文件夹。过了一段时间,你意识到你不想要那些文件或文件夹。你需要干净的工作树。这些是git中未跟踪的文件。

未经跟踪的文件是您尚未使用的文件 git add

要使工作树清洁,可以运行以下命令。此命令将删除git未跟踪的所有文件和目录。



git clean -df


如果要在删除之前查看将删除哪些未跟踪的文件,则可以运行此命令。


git clean -dn



#rm


现在您要删除跟踪的文件。您可以使用此命令删除跟踪的文件。


git rm <file-path>


如果您的文件位于暂存区域,则必须提供额外的强制标记。


git rm <file-path> -f


您想要从git存储库中删除文件,而不是从文件系统中删除文件,然后您可以运行此命令。


git rm --cached <file-path>



#branch


您在分支名称中输入了拼写错误,或者您想要更改分支名称,然后以下命令将更改您的分支名称。


git branch -m <old-branch-name> <new-branch-name>


您想要更改当前分支名称,然后您可以运行以下命令。


git branch -m <new-branch-name>


如果您已使用旧名称推送分支,则需要执行几个额外步骤。您需要从远程删除旧分支并推送新分支。


git push <remote-name> --delete <old-branch-name>

git push <remote-name> <new-branch-name>


您希望推送本地分支代码,但您的本地分支名称与远程存储库分支名称的名称不匹配。然后,您可以运行以下命令。


git push <remote-name> <local-branch-name> :<remote-branch-name>



#log


您希望查看提交历史记录,以便运行git log命令。这显示了很多信息,但您只需要查看提交ID和消息。然后,您可以运行以下命令。


git log --oneline


git log --oneline 将显示以下类型的输出。


上面输出中的前七个字符是速记提交ID,然后我们有提交消息。commit id是简写,因为完整的commit id是指定160位SHA-1哈希的四十个十六进制字符。注意事项Head -> master 。这意味着我们现在处于主分支。

如果要查看特定作者的提交消息,则可以运行以下命令。我假设作者姓名是qianpangzi。

git log --author ="qianpangzi"


#stash


您正在分支机构工作并进行了一些更改。现在,您希望在进行这些更改之前只查看该分支的输出或代码。然后你可以运行stash命令。它将使您的工作树清洁。


git stash


如果您想要更改,则必须运行以下命令。


git stash pop


如果您不希望这些更改,则必须运行以下命令。


git stash drop


你在错误的分支中更改了一些文件。然后,您可以存储更改并结帐到所需的分支并在git stash pop那里运行。您将在所需的分支中获得更改。


#checkout


您想切换到分支。然后您可以运行以下命令。

git checkout <branch-name>


如果您已在当前分支中更改了某个文件,请确保stash更改或commit更改。。如果您没有stash或commit那些更改,它也会反映在您可能不想要或不需要的已切换分支中。

您有一个分支名称,development并且您希望从中创建分支development并直接切换到新分支。然后,您可以运行以下命令。


(development)$ git checkout -b <your-new-branch-name>


您还可以使用commit id进行checkout。如果项目不是很大,您可以安全地使用短的 commit id。


git checkout <commit-id>


这将在git中处于detached head状态。Head只是对当前分支上当前提交(最新)的引用通常,git中的head可以指向分支或提交。当Head指向分支时,git不会抱怨。但是当head指向一个提交但不指向一个分支时,它会进入一个detach head状态。

你想从这个detached head状态开发一个特征,然后你必须从这个状态分支并在那里开发你的feature。

git checkout -b <your-new-branch-name>

#commit

您刚刚添加了一条提交消息,并意识到您的提交中存在拼写错误,或者您只是想让您的提交消息更具表现力和可理解性。然后您可以使用以下git命令。

git commit --amend -m "your-new-commit-message"

如果您刚刚添加了一些文件或修复了一个错误但又不想添加另一个提交消息,那么您可以使用以下git命令和--no-editflag。

git commit --amend --no-edit

这里有一点非常重要,要记住修改最后一次提交会重写提交历史记录。这意味着当您修改提交时,您的commit id将会更改。


如果您已经将代码推送到远程存储库中,然后您意识到必须amend提交消息,那么在修改之后,您必须进行强制推送。假设您的远程名称,origin您可以运行以下命令。

git push origin <branch-name> -f

#reset


你想丢弃你最后的一些提交。然后你可以git reset用来丢弃那些提交。你应该知道git reset有三个标志。


  • --soft

  • --mixed

  • --hard

假设您要放弃更改,直到添加了具有commit id: 96b037c的two.txt

现在,让我们git reset用--softflag 运行命令。

git reset --soft  96b037c

git reset --soft将在该commit id之后进行孤立所有提交(e.g 96b037c),但不会删除这些文件。文件将位于暂存区域中。

孤立提交意味着ref没有直接路径来访问它们。通常可以找到并恢复这些孤立的提交,使用git reflog Git将在运行内部垃圾收集器后永久删除任何孤立的提交。默认情况下,git配置为每30天运行一次垃圾收集器。

因此,如果您运行,git status您将看到以下输出。


如果您运行,git log --oneline您将看到先前的提交被删除。


假设您要还原最后一次提交。恢复后,您的状态将如下图所示。


在最后一次提交之前,没有添加six.txt文件,因此将其删除并将five.txt更改回之前的状态。现在,在提交您的提交历史记录后,这将是这样的。



您希望还原一个范围内的多个提交,然后您可以运行以下命令。


git revert <oldest-commit-id> ..<recent-commit-id> --no-commit


如果要还原多个不在范围内的提交,则必须提供要还原的每个commit id。


git revert <commit-id> <commit-id-2> --no-commit


#cherry-pick


您正在分支工作,并且您需要从另一个分支进行提交(例如,错误修复提交)以在您当前的分支中工作。然后,您可以使用cherry-pick命令在当前分支中获取该提交。如果您在错误的分支中提交并希望在另一个分支中提交,这也很有帮助。

首先,您必须切换到具有提交的分支。复制该提交的commit id并切换回您自己的工作分支。然后运行以下命令以获取工作分支中的提交。

git cherry-pick就像从文件夹中复制一些东西并将其粘贴到另一个文件夹中。因此,它不会从您选择的位置删除提交,并且在目标分支中,commit id 也将不同。

git cherry-pick <commit-id>

我几乎每天都在学习和使用git,并且不认为自己是一个先进的git用户。所以,如果我犯了任何错误,请随时纠正我,并在评论部分提出您的建议。


                      一个思考的胖子