IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    诺多发表于 2024-08-15 23:00:00
    love 0

    Git

    Git 是一个用于管理源代码的分布式版本控制系统,由Linux大神Linus开发。在现代软件开发领域,Git 已成为版本控制的事实标准,凭借其强大的功能和无与伦比的灵活性,Git 使开发人员能够跟踪更改、无缝协作并有效地管理代码。版本控制系统会在你修改文件时记录并保存更改,使你可以随时恢复以前的工作版本。简而言之,使用Git可以以团队形式协作编写代码,并跟踪代码历史记录。

    Git的基本概念

    1️⃣ 关于存储库

    存储库 (即 repository) 是用于存储代码的位于中心的文件夹,一旦拥有包含文件和目录的 Git 存储库,就可以开始跟踪更改和版本。
    存储库有两种类型:

    • 远程存储库托管在远程服务器上 (并在多个团队成员之间共享。
    • 本地存储库为单个用户托管在本地机器上。

    Git

    2️⃣ 关于分支

    Git 分支在本质上是一条独立的开发线,在处理新功能或 bug 修复时,可以使用分支来将你的工作与其他团队成员的工作隔离开来。
    Git

    3️⃣ 关于变更与同步

    Git 不会自动记录你所做的每个更改,你必须通过在索引中暂存这些更改来告诉 Git 你想要记录哪些更改。暂存后,就可以提交这些更改,以便将它们记录在存储库中。提交的每个更改都可以在相应的文件或目录中按时间顺序查看。

    Git

    要与他人共享更改时,你必须将更新推送到远程存储库,将本地存储库与远程存储库同步。
    Git

    每当有人将他们的更改推送到共享的远程存储库时,你的本地存储库就会过时。如果你的本地存储库已过时,在推送前,你需要先获取远程存储库的最新修改,并将其整合进本地存储库。

    如果二者有冲突,你需要先解决冲突,并提交到本地,然后才能推送。
    Git

    Git的常用命令

    1️⃣ 基本命令

    创建 Git 存储库

    $ git init
    

    在要创建存储库的目录中运行 init 命令。

    添加文件/目录到索引

    $  git add <filepattern>
    

    可以指定要添加到索引中的单个或多个文件和目录名称。可以直接指定文件名,也可以在代码中使用*.txt等通配符。将.放在文件模式中,将把所有当前的变化暂存到索引中,包括子目录中的文件。

    添加-p选项,系统将提示你接受/拒绝已更改文件的特定部分。添加-i选项,则可以交互式地暂存更改。

    将更改提交到本地存储库

    $ git commit
    

    添加-a选项就像一个快捷方式,可以检测更改的文件 (新添加的文件除外),将它们添加到索引,并提交它们。

    添加-m选项可以同时提交和指定提交消息。如果不指定-m,将打开一个文本编辑器,提示你输入提交消息。

    撤消上一次提交的更改

    $ git revert HEAD
    

    该命令将一个提交作为参数,并创建一个新的提交来撤消该提交所做的更改。

    显示工作树状态

    $ git status
    

    添加-s选项将只显示已更改的文件名。后面再接-b选项时,将在输出中包含分支名称。

    显示对工作树和索引的更改

    $ git diff
    

    在默认情况下,diff 命令将会显示工作树和索引之间的差异。如果添加--cached选项,将显示索引和 HEAD 之间的差异。如果指定提交的哈希值,将会显示工作树和当前的 HEAD与提交之间的差异。

    显示提交日志

    $ git log
    

    在默认情况下,日志将会显示当前分支的提交列表。指定文件名将仅显示该给定文件的提交日志。

    显示提交详细信息

    $ git show <commit>
    

    重命名文件

    $ git mv <oldfilename> <newfilename>
    

    从工作树和索引中移除文件

    $ git rm <file>
    

    从工作树中移除未跟踪文件

    $ git clean
    

    添加-n选项将只显示将要移除的文件,添加-f选项实际上会移除文件。在默认的情况下,不会移除.gitignore配置文件下列出的文件。但是,如果指定-x选项,.gitignore下列出的文件将从工作树中移除。

    将文件恢复到工作树

    $ git checkout -- <file>
    

    从索引中移除文件

    $ git reset HEAD -- <file>
    

    仅将修改和删除的文件添加到索引

    $ git add -u
    

    注册已添加到索引的文件的更改,它不会暂存未跟踪的文件。

    2️⃣ 远程命令

    创建 Git 存储库

    $ git clone <url>
    

    将在本地计算机上创建现有远程存储库的副本,还将配置本地存储库以自动跟踪远程存储库。

    显示远程存储库列表

    $  git remote
    

    如果添加-v选项,还可以查看远程存储库的详细信息。

    从远程存储库签出分支

    $ git checkout <branch>
    

    该命令会基于你已经获取的远程存储库中的分支,在本地存储库中创建一个分支。

    创建分支更改并将其推送到远程存储库

    $ git push <repository> <refspec>
    

    在远程存储库中创建一个分支,并从本地存储库中推送更改。添加-u选项允许 Git在成功推送本地分支时添加对远程存储库的跟踪引用。下次执行推送/获取/拉取时,将不必指定存储库参数。

    检查远程存储库中的分支更改

    $ git fetch <repository> <refspec>
    

    从远程存储库检索最新数据,以检查更改的内容。但是,此命令不会自动将更改合并到您现有的任何工作中。
    repository和refspec参数都是可选的。省略存储库名称将产生与推送命令相同的操作;省略refspec参数将确保获取可应用于该远程存储库中的所有分支。

    从远程存储库获取并合并最新的分支更改

    $ git pull <repository> <refspec>
    

    从远程存储库中检索最新更改的内容,并将其直接合并到您的本地存储库中。基本上,pull = fetch + merge。
    repository和refspec参数都是可选的。省略repository将产生与推送命令相同的操作。省略refspec参数将确保拉取仅应用于当前分支。

    从远程存储库删除分支

    $ git push --delete <repository> <branchname>
    

    在远程存储库中创建标签

    $ git push <repository> <tagname>
    

    添加--tags选项,则本地存储库中存在的所有标签都将被推送到远程存储库中,并在远程存储库中创建标签分支。

    在远程存储库中创建标签

    $ git push --delete <repository> <tagname>
    

    修改远程存储库地址

    $ git remote set-url <name> <newurl>
    

    将现有远程存储库的地址改为中指定的地址。

    重命名远程存储库

    $ git remote rename <old> <new>
    

    将现有远程存储库的名称从改为。

    3️⃣ 分支命令

    显示分支列表

    $ git branch
    

    当前分支将以绿色突出显示并标有星号。添加-r选项还将列出远程跟踪分支。添加-a选项将同时显示远程和本地分支。

    创建分支

    $ git branch <branchname>
    

    重命名分支

    $ git branch -m <oldbranch> <newbranch>
    

    删除分支

    $ git branch -d <branchname>
    

    如果该分支还没有完全与上游分支合并,或者在 HEAD 中如果没有上游,Git 将不允许您删除该分支。但是可以指定-D以强制删除它,而不管其合并状态如何。

    切换分支

    $ git checkout <branch>
    

    签出并切换到你想要的分支。添加-b选项将创建一个新分支,并切换到它。

    合并分支

    $ git merge <branch>
    

    添加--no-ff选项, git merge 命令将会创建合并提交,而不是快进,并且会保留合并前分支的历史记录信息。

    添加--squash选项时,Git 会创建一个代表合并更改的单个提交,而不是创建合并提交。 此提交包含来自合并分支的更改,但不包含任何与合并分支或合并过程本身相关的信息。

    4️⃣ 历史记录命令

    修改之前的提交和消息

    $ git commit --amend
    

    覆盖当前分支的最新提交,当索引中没有文件时,也可以通过添加--amend选项重新提交之前的提交,系统将提示你编辑现有的提交消息。

    修改并移动历史的提交和消息

    首先使用rebase列出直到最新提交的所有提交的列表,找到要修改的提交,并将该行从pick更改为edit,然后保存并退出。

    $ git rebase -i <commit>
    

    接下来提交这次修改。

    $ git commit --amend
    

    最后,进行变基。

    $ git rebase --continue
    

    退出变基

    $ git rebase --abort
    

    显示参考日志

    $ git reflog
    

    查看 HEAD 过去用来指示的提交列表,将显示由 rebase 收集的已删除和成功的提交。

    显示分支提示的参考日志

    $ git reflog <ref>
    

    将显示每次提示的提交列表 <ref> 的改变记录。

    移除以前的提交

    $ git reset --hard HEAD~
    

    重置变基

    $ git reset --hard <commit>
    

    取消之前的重置

    $ git reset --hard ORIG_HEAD
    

    从另一个分支复制提交

    $ git cherry-pick <commit>
    

    搜索提交消息

    $ git log --grep <pattern>
    

    5️⃣ 暂存命令

    暂存当前的更改

    $ git stash save
    

    暂存命令会保存您的本地修改,并恢复工作目录以匹配 HEAD 提交。

    显示暂存列表

    $ git stash list
    

    从暂存中恢复更改

    $ git stash pop
    

    将最新的暂存将恢复到当前的工作区。添加暂存ID参数 (例如 stash@{1}) ,将会把此ID的暂存恢复到当前的工作区。

    删除暂存

    $ git stash drop
    

    也可以制度ID进行删除。

    删除所有暂存

    $ git stash clear
    

    6️⃣ 标签命令

    显示标签列表

    $ git tag
    

    添加-n选项将显示每个标签上的注释。

    创建标签

    $ git tag <tagname>
    

    创建带有信息的标签

    $ git tag -a <tagname>
    

    删除标签

    $ git tag -d <tagname>
    

    7️⃣ 标签命令

    设置用户名和电子邮件

    $ git config --global user.name <username>
    $ git config --global user.email <mailaddress>
    

    如果没有--global选项,此设置将仅应用于当前存储库。

    彩色显示输出

    $ git config --global color.ui auto
    

    为命令设置别名

    $ git config --global alias.<aliasname> <commandname>
    

    从版本控制跟踪中删除文件

    $ echo <filename> >> .gitignore
    

    在.gitignore文件下添加要取消跟踪的文件路径,Git 将不再管理这些文件。

    在版本控制下跟踪空目录

    $ cd <dirname>
    $ touch .gitkeep
    

    默认情况下,Git不会跟踪空目录。如果想将其添加到版本控制中,则需要在该目录中放置一个文件。通常做的做法是在空目录中添加一个.gitkeep文件。

    显示设置

    $ git config --global --list
    

    设置HTTP代理服务器

    $ git config --global http.proxy <address of the proxy server>:<port of the proxy server>
    

    建立HTTP代理认证

    git config --global http.proxy http://<username>:<password>@<address of the
      proxy server>:<port of the proxy server>
    

    原创不易,如果觉得此文对你有帮助,不妨点赞+收藏+关注,你的鼓励是我持续创作的动力!

    高等精灵实验室



沪ICP备19023445号-2号
友情链接