在本文中,我们将讨论Git。Git是一个版本控制系统,一种用于跟踪代码更改并与他人共享这些更改的工具。本文列出了QA/开发人员应该知道的最基本的命令,以便在高层次上掌握GitHub存储库管理。再次复习基本的日常命令对初学者和有经验的用户都很有用。在Git中设置用户名需要用户名才能将提交绑定到您的名字。这与用于登录GitHub个人资料的GitHub帐户用户名不同。gitconfig可以使用命令设置或更改用户名。新名称将自动出现在通过命令行推送的后续提交中。gitconfig--globaluser.name"MichaelScott"您还可以使用命令gitconfig更改与您的git提交关联的电子邮件地址。新的电子邮件地址将自动出现在所有未来通过命令行提交到GitHub的内容中。gitconfig--globaluser.email"michael.scott@dundermifflin.com"凭据缓存可以使用带有标志的配置选项来缓存凭据。--global这可以帮助您避免在创建新提交时手动输入用户名和密码。用于临时将密码存储在内存中。gitconfig--globalcredential.helpercachesetrepository创建一个空的Git存储库或重新初始化现有的。执行gitinit在当前工作目录中创建一个.git子目录,其中包含新存储库所有必需的Git元数据。此元数据包括对象、参考和模板文件的子目录。gitinit将文件添加到暂存区gitadd命令将工作目录中的新文件或更改的文件添加到Git暂存区。添加一些文件:gitaddsomefile.js添加所有文件:gitadd.repostatuscheckgitstatus命令显示工作目录和暂存区的状态。它可以让您查看哪些更改已暂存,哪些尚未暂存,以及哪些文件未被Git跟踪。gitstatus获取更改快照以记录对存储库的更改。此命令用于将更改保存到本地存储库。它可以与一些git键一起使用,例如:-m向您的提交添加一条消息-a将所有文件暂存到您的提交中--amendrewritelast使用任何当前暂存的更改或新的提交消息Commitgitcommit-m"Commitmessage"gitcommit--amendgitcommit--amend-m"Newmessage"检查Git历史以显示提交日志。此外,作为Git用户,您可以通过向其添加一些键以更高级的方式使用gitlog命令。gitlog使用oneline标志将每个提交显示为一行:gitlog--onelineshortlog按作者对每个提交进行分组并显示每个提交消息的第一行:gitshortlog--graph选项绘制一个ASCII图表示分支结构提交历史。这通常与--oneline命令结合使用--decorate可以更容易地看到哪个提交属于哪个分支:gitlog--graph--oneline--decorate你还可以限制提交日志输出的数量:gitlog-5支持过滤git历史,例如按日期、作者、文件或消息:gitlog--after="yesterday"--before="2022-10-10"gitlog--author="Michael"gitlog--somefile.jsgitlog-S"fix"showchangesgitdiff显示提交、提交和工作树之间的更改。gitdiff指定一个文件名以显示对其文件所做的更改:gitdiffsomefile.js显示分支master和develop之间的更改:gitdiffmaster..developfilerename您可以使用命令mv重命名文件或文件夹。您应该指定源路径和目标路径。源是实际文件或文件夹,目标是现有文件夹。gitmvdirectory1/somefile.js目录分支特征一个分支代表一条独立的开发线。分支作为编辑/暂存/提交过程的抽象。gitbranch命令允许您创建、列出、重命名和删除分支。创建一个新的分支:gitbranchbranch_name你也可以传递一些键给gitbranch命令:gitbranch-m重命名当前分支gitbranch-d删除本地分支gitpushorigin--deletePushchangestoremoteNotifydeletebranchtoremoteoriginrepository(需要与之前的命令一起使用)gitbranch-a显示所有分支的列表撤消文件更改gitrestore命令有助于取消甚至丢弃未提交的本地更改。此命令可用于撤消您之前添加的gitadd和unstage更改的影响。它还可用于丢弃文件中的本地更改,从而恢复其上次提交的状态。gitrestoresomefile.jsgitrestore--stagedindex.js使用远程命令gitremote来管理一组被跟踪的远程存储库。显示所有远程连接的列表:gitremote-v要更改远程URL:gitremoteset-url要重命名当前连接,可以使用下一个命令:gitremoterename要删除连接:gitremoteremove将更改保存到剪贴板gitstash将更改存储在脏工作目录中。此命令获取您未提交的更改(暂存的和未暂存的)并保存它们供以后使用。gitstash可以在命令中添加几个键:gitstash隐藏跟踪文件gitstash-u隐藏未跟踪文件gitstash-a隐藏所有文件(包括被忽略的文件)stash命令将你的更改保存到某种Changelist中,你可以访问它with:gitstashlist此外,你可以在你的stash中添加一条消息,使用gitstashsave"message"命令对其进行注释:gitstashsave"somecomment"此外,它还支持查看stashdiffs:gitstashshow应用stash已保存的更改(它将应用存储列表中的最后一个存储):gitstashapply和清除所有存储的能力:gitstashcleartaggittagtags存储库历史特定点在.gittagv1.1要访问标签列表,请使用gittag-l。要删除,只需传递特定的键gittag-dv1.0。列出远程标签:gitls-remote--tags。要重新标记(现有标记的重命名),只需使用强制键:发送gittag-fv1v1.1,在这种情况下我们使用newforv1Renamev.1.1。获取最新的远程更改要获取最新的本地更改,有两个git命令:gitpull和gitfetch。它们之间的主要区别在于gitfetch会下载远程内容但不会更新本地存储库的工作状态,使得你当前的工作保持不变。我个人使用gitfetchkeyed命令--prune,这是清理过时分支的最佳实用程序。在获取之前,删除遥控器上不再存在的任何远程跟踪参考。相反,gitpull将为活动的本地分支下载远程内容,并立即执行合并到您的文件。gitpull也可以与rebase公钥一起使用:gitpull-rpullandrebase。为了撤消更改和恢复丢失的提交,gitcherry-pick用于此目的。git中的Cherry-picking意味着您从一个分支中选择一个提交并将其应用到另一个分支。通常在开发团队中,这用于在发布阶段或需要应用未合并的提交时快速修复错误(修补程序)。要使用此命令,您应该通过提交sha。撤消最后一次提交在git中,有两种方法可以撤消最后一次更改:gitrevert和gitreset。gitrevert命令创建一个新的提交,撤销上一次提交的更改。此命令向项目添加新的历史记录。gitreset用于撤消工作目录中未提交的更改。重置命令可以与参数--soft、--mixed、--hard一起使用。默认情况下,Git使用带有--mixedkey的重置(取消提交+取消暂存更改)。开发人员经常使用--hard选项(uncommit+unstage+deletechanges)。当通过--hard提交历史引用指针时,它将更新为指定的提交。如果您想取消提交更改,--soft是一种更准确的方法,在这种情况下,将暂存更改。例如,要在git上将文件硬重置为HEAD:gitreset--hardHEAD要在提交或分支之间切换,请使用gitcheckout命令。您可以通过简单地将branch_name/commit_sha传递给gitcheckout命令来在提交和分支之间切换。此外,您可以使用checkout命令创建新的不存在的分支,这将创建新的分支并切换到它:gitcheckout-bnew_branch要检查一些提交,其中5939515是提交sha:gitcheckout5939515找到一个那破坏了一些东西commitgitbisect是你的朋友-Git中一个非常强大的命令,可以提供很多帮助。它用于将两个提交指向一个边缘情况,然后重新传递这两个点之间的所有提交历史记录(如果存在某些特定的失败,则按标记提交)。要使用,首先,你应该使用工具开始初始化:gitbisectstart然后我们应该将两个边缘情况标记为坏和好:gitbisectbadgitcheckoutcommitgitbisectgood通过提交你可以很容易地找到错误的提交,可能介绍了一些错误/错误。显示谁对所选文件进行了更改gitblame命令用于此目的。主要目的是显示所选文件的日志,显示谁以及何时对此文件进行了更改。gitblamesomefile.js这将显示对文件、作者、日期和提交消息所做的提交列表。该命令可以用来传递一些键值,例如-e在日志中显示作者的电子邮件地址,-L1-7限制并只显示7行输出。gitblame和gitlog之间的主要区别是blame可以告诉你最后一个人是谁以及什么时候修改了每一行代码。