Git 是一个用于管理源代码的分布式版本控制系统,由Linux大神Linus开发。在现代软件开发领域,Git 已成为版本控制的事实标准,凭借其强大的功能和无与伦比的灵活性,Git 使开发人员能够跟踪更改、无缝协作并有效地管理代码。版本控制系统会在你修改文件时记录并保存更改,使你可以随时恢复以前的工作版本。简而言之,使用Git可以以团队形式协作编写代码,并跟踪代码历史记录。
存储库 (即 repository) 是用于存储代码的位于中心的文件夹,一旦拥有包含文件和目录的 Git 存储库,就可以开始跟踪更改和版本。
存储库有两种类型:
Git 分支在本质上是一条独立的开发线,在处理新功能或 bug 修复时,可以使用分支来将你的工作与其他团队成员的工作隔离开来。
Git 不会自动记录你所做的每个更改,你必须通过在索引中暂存这些更改来告诉 Git 你想要记录哪些更改。暂存后,就可以提交这些更改,以便将它们记录在存储库中。提交的每个更改都可以在相应的文件或目录中按时间顺序查看。
要与他人共享更改时,你必须将更新推送到远程存储库,将本地存储库与远程存储库同步。
每当有人将他们的更改推送到共享的远程存储库时,你的本地存储库就会过时。如果你的本地存储库已过时,在推送前,你需要先获取远程存储库的最新修改,并将其整合进本地存储库。
如果二者有冲突,你需要先解决冲突,并提交到本地,然后才能推送。
创建 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
注册已添加到索引的文件的更改,它不会暂存未跟踪的文件。
创建 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>
将现有远程存储库的名称从改为。
显示分支列表
$ 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 会创建一个代表合并更改的单个提交,而不是创建合并提交。 此提交包含来自合并分支的更改,但不包含任何与合并分支或合并过程本身相关的信息。
修改之前的提交和消息
$ 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>
暂存当前的更改
$ git stash save
暂存命令会保存您的本地修改,并恢复工作目录以匹配 HEAD
提交。
显示暂存列表
$ git stash list
从暂存中恢复更改
$ git stash pop
将最新的暂存将恢复到当前的工作区。添加暂存ID参数 (例如 stash@{1}) ,将会把此ID的暂存恢复到当前的工作区。
删除暂存
$ git stash drop
也可以制度ID进行删除。
删除所有暂存
$ git stash clear
显示标签列表
$ git tag
添加-n
选项将显示每个标签上的注释。
创建标签
$ git tag <tagname>
创建带有信息的标签
$ git tag -a <tagname>
删除标签
$ git tag -d <tagname>
设置用户名和电子邮件
$ 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>
原创不易,如果觉得此文对你有帮助,不妨点赞+收藏+关注,你的鼓励是我持续创作的动力!