Git:在实际开发中的使用(够你用十年)

Posted wuwuFQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git:在实际开发中的使用(够你用十年)相关的知识,希望对你有一定的参考价值。

Repository

我们先来认识一下版本库——Repository,接下来我们所有提到的 Git 基础命令,都是基于版本库的。

那么什么是版本库呢?版本库又名仓库,英文名 repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

仓库又分为本地仓库和远程仓库:

  • 本地仓库:项目在你本地开发机(电脑)存放的历史记录
  • 远程仓库:项目在服务器上(如GitHub、GitLab)的历史记录

接下来,我们首先看看 Git 版本库创建的相关命令。

初始化本地仓库 —— git init

  1. 创建一个空目录,作为项目文件夹

    //创建一个空目录
    mkdir ios-git  
    cd ios-git  
    pwd
    <!-- /Users/xxx/ios-git  -->
    
  2. 初始化仓库

    git init
    

    瞬间 Git 就把本地仓库建好了,而且告诉你是一个空的仓库(empty Git repository),同时在当前目录下多了一个.git的目录,这个目录是 Git 来跟踪管理版本库的,如果你没有看到 .git 目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看到了。

  3. 连接远程仓库
    以只是在本地创建了仓库,团队协作中为了让大家都可以访问,需要把代码放在远程仓库(你可以在GitHub、Gitee或GitLab上创建远程仓库):

git remote add origin ssh://git@git.xxx.com:2289/ios/docs.git
git add .
git commit -m "Initial commit"
git push -u origin main

这样才是一个完整的仓库创建。

克隆现有的仓库 —— git clone

如果远程仓库已经存在项目,你想把项目拉取下来,那就简单了。这时就要用到 git clone 命令,Git 克隆的是该 Git 仓库服务器上的几乎所有数据,每一个文件的每一个版本都将被拉取下来

git clone https://gitcode.net/codechina/help-docs

这会在当前目录下创建一个名为 help-docs 的目录,并在这个目录下初始化一个 .git 文件夹,如果你进入到这个新建的 help-docs 文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。

自定义本地仓库名称

你想在克隆远程仓库的时候,自定义本地仓库的名字:

git clone https://gitcode.net/codechina/help-docs mydocs

以上就是开发的准备工作,初始化Git后,就是在工作中的使用了,下面列举一些常用的Git方法:

Git 常用方法

作用方法备注描述
查看仓库当前状态变化git status git status -s 简短输出查看工作区和暂存区有没有未提交的文件
比较变动git diff readme.txt查看readme.txt具体修改的内容是什么
添加git add readme.txt git add .把文件从工作区添加到暂存区git add .是添加所有修改的文件
提交git commit -m "提交备注" git commit -a git commit -am "提交备注"把暂存区的所有内容提交到当前分支,你可以在 “” 里面备注自己提交的什么 -a是代表add,也就是不用单独再使用add命令了,
拉取git pull git pull origin git pull origin master:devgit pull origin master:dev 拉取master分支合并到dev分支
推送git push git push origin master git push --force origin master 强制推送如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数
查看日志git loggit log --oneline git log --reverse --oneline查看当前HEAD及之前提交的历史记录--oneline 简洁输出--reverse 正序输出,默认时间倒序输出最近时间的
查看修改记录git blame readme.txt查看readme.txt文件的修改记录
重置/回退git reset --hard HEAD^ git reset --hard commit_idGit 中,用HEAD表示当前版本,也就是最新的提交e55063a,上一个版本就是HEAD^,上上一个版本就是HEAD^^,100个^写成HEAD~100,也可重置到指定的commit_id resetHEAD 指向自己重置的提交记录commit_idcommit_id之后的提交记录都不复存在
还原/回滚git revert --hard HEAD^ git revert --hard commit_idgit revert是用来重做某一个 commit 提交的内容,在分支上面会创建了一个新的 commit 提交,我们还原commit_id这条记录时,这条记录提交的代码会被清掉,这条记录之前和之后的代码还在
查看本地日志git reflog查看当前HEAD之前和之后(也就是整个分支)提交的历史记录如果你reset后,第二天后悔了,git log是查不到你昨天的提交记录的,git reflog就可以,然后再用git reset --hard commit_id回到最初的代码reflog并不是Git仓库的一部分,它是本地.git/logs/HEAD或者是.git/logs/refs目录中的文件,只能看到你在本地操作的提交记录。
补提交git commit --amendgit commit --amend -m "提交描述"当你git commitgit push时,发现还有修改需要提交,但是不想再增加commit记录git commit --amend会创建一个新的commit_id覆盖之前的commit_old记录,git log查看记录会看到新的commit_id记录,之前的commit_old记录就没了。
取消暂存git reset HEADgit reset HEAD readme.txt把文件从暂存区恢复到工作区,上面讲到的重置命令是加了--hard,意思是将工作区和暂存区都恢复到最初
撤消修改git checkout . git checkout -- readme.txt文件在工作区没有放到暂存区时(未add),想放弃对文件的修改 git checkout .放弃所有
查看分支git branch 查看本地分支 git branch -a 查看远程分支
创建分支git checkout -b dev git branch dev创建 dev 分支
切换分支git checkout dev git switch dev切到 dev 分支上
合并指定分支到当前分支git merge dev把dev分支合并到当前分支
删除分支git branch -d dev
创建标签git tag v1.0git tag -a v1.0 -m "发布1.0版本"
查看所有标签git tag查看本地标签git ls-remote --tags origin 查看远程标签
删除标签git tag -d v0.1 删除本地标签 git push origin :refs/tags/v0.1 删除远程标签如果你已经推送到远程了,那这两个命令都要用
推送tag标签git push origin v0.1 推送单个taggit push --tagsgit push origin --tags开发中直接使用git push --tags就足够了
查看缓存列表git stash list
缓存git stash git stash save git stash save "xxx"将文件从工作区移除然后放在缓存里,stash 只会操作被git追踪的文件,新增的文件并不会进入缓存,因为git还没有追踪这个新增的文件。
取出缓存git stash pop git stash pop stash@$num取出缓存到工作区并从堆栈中移除stash 默认恢复git栈中最新的一个stash@num,建议在git栈中只有一条的时候使用,以免混乱 也可以指定stash@$num
恢复缓存git stash apply git stash apply stash@$num将堆栈中的内容恢复到当前分支下,该命令不会将内容从堆栈中删除缓存
移除缓存git stash drop git stash drop stash@$num从堆栈中移除stash、移除指定的stash@$num
清空缓存git stash clear移除全部的stash

以上是关于Git:在实际开发中的使用(够你用十年)的主要内容,如果未能解决你的问题,请参考以下文章

Git:在实际开发中的使用(够你用十年)

用十年自学编程(转)

Markdown语法大全(够你用一辈子)

Markdown语法大全(够你用一辈子)

Markdown语法大全(够你用一辈子)

“在 GitHub 用十年攒的 54k+ Star,一个误操全没了”