Git 精简快速使用
安装 Git 忽略,自行搜索
新建项目,或者在仓库拉取项目,进入到项目目录
Github 给出的引导,新项目和旧项目
echo "# testgit" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/9sis/testgit.git
git push -u origin main
git remote add origin https://github.com/9sis/testgit.git
git branch -M main
git push -u origin main
关于 branch -M 和 push -u 的知识点
git branch -M
在 Git 中,默认的主分支通常被称为 `master` 或 `main`。然而,有些团队或组织可能更喜欢使用其他名称作为主分支,例如 `develop`、`mainline` 等。
使用 `git branch -M` 命令可以在创建分支时直接指定主分支的名称,而不必先创建默认主分支,然后再进行重命名操作。这样可以节省一些步骤和命令。
git push -u origin main
在 `git push -u origin main` 命令中,`-u` 是 `--set-upstream` 的缩写,它用于将本地分支与远程分支进行关联。
总结起来,`git push -u origin main` 命令中的 `-u` 标志用于将本地分支与远程分支进行关联,以后的推送可以直接使用 `git push` 命令。
origin
在 Git 中,远程仓库是指位于本地仓库之外的一个或多个仓库,用于共享代码和协同开发。当你克隆一个远程仓库到本地时,Git 默认会将该远程仓库命名为 `origin`,但你也可以为其指定其他名称。
以下是使用命令
设置查看或者更改推送用户信息
#设置
git config --global user.name "bj"
git config --global user.email "bj@126.com"
#查看全局用户,在操作系统用户根目录下 .gitconfig
#查看
git config user.name
git config user.email
添加修改远程仓库地址
#查看
git remote -v
#指定查看
git remote show origin
#添加
git remote add origin 远程仓库URL
#修改
git remote set-url origin 新的远程仓库地址
初始化,添加,提交
git init
git add .
git commit -m 'note'
#如果上一次提交后,发现有遗漏,但是不想新增 commitID,可以继续修改文件,然后 add 到暂存区,在使用 --ammend,这样提交后不会新增 commitID
git commit --amend
git push origin master
查看修改前的文件
#针对一个文件,我们可以使用 diff 命令来对比和提交前有哪些修改
#好比我们第二天开始写代码,想看看都在最后一次提交前做了哪些修改
git diff readme.txt
添加分支,切换
#在 Git 中,默认的主分支通常被称为 `master` 或 `main`
#使用 `git branch -M` 命令来强制创建分支并重命名更改默认的主分支名称
#查看分支
git branch
#创建并切换至分支
git checkout -b <name> 或者 git switch -c <name>
#等于执行以下两条命令
#新建分支 dev
git branch dev
#切换分支到 dev
git switch dev
#删除分支,如果当前分支没有被合并,则需要按照提示 -D 来强制删除
git branch -d <分支名>
#合并分支,在当前分与目标分支合并
git merge <要合并的分支名>
#加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git merge --no-ff -m "merge with no-ff" 分支名
#更改分支后提交仍需要指定远程分支名
git push origin dev
#设定分支以及远程仓库绑定
git push --set-upstream origin master
对一个文件进行了大范围的修改,还没有 add 到暂存区,突然发现没鸟用,需要复原
#其实我们在执行 git status 输出信息里就有看到这个命令
git restore 文件名
如果已经 add 到暂存区,还没有 commit
#此命令在执行 status 时也会又提醒
git restore --staged 文件名
#在执行 git status 发现,又可以使用 git restore 命令复原了,但是修改文件内容还在
git restore 文件名
#文件已经复原了
对已经 commit 的取消
#取消当前 commit 后面的 ^ 代表上一个,当然也可以 ^^ 太多的话 可以使用数字 HEAD~100
git reset HEAD^
#取消当前 commit ,并且丢弃当前代码的修改内容,和上次提交保持相同,慎用
git reset --hard HEAD^
#提交次数过多,想回到历史指定版本,先查看提交日志,开头随机字符串未 commit id
git log
#美化版
git log --pretty=oneline
#默认只会显示当前分支的提交,要显示所有分支的提交请使用 --all
git log --all --graph --oneline
#复制 commit id 不需要全部复制,可前六位,回到指定历史版本
git reset --hard 1094ab
如果已经 add 到暂存区,还没有 commit
#此命令在执行 status 时也会又提醒
git restore --staged 文件名
#在执行 git status 发现,又可以使用 git restore 命令复原了
git restore 文件名
#文件已经复原了
通常我们会手动删除文件,突然发现误操作,依然可以使用 restore 恢复
如果确定删除,请使用 git rm 命令删除,然后执行 commit
#当我们删除一个文件后,执行 git status
On branch master
nothing to commit, working tree clean
C:\Users\likeo\Desktop\html\testgit>git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: LICENSE
no changes added to commit (use "git add" and/or "git commit -a")
#以上系统已经提醒我们,可以使用 restore 恢复
git restore LICENSE
当前工作正在忙碌,但是突然需要修改 bug ,需要先储藏当前内容,然后在进入其他分支进行修改 bug
$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge
#查看储藏列表
git stash list
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
#指定恢复
git stash apply stash@{0}
cherry-pick 有很大的用途
场景一:你在分支上面开发了 A B C 三个功能,但是后来只需要 A B 两个,那么你可以新建分支或者切换到应用分支,使用 cherry-pick commitID 逐个迁移过来
合并单个提交:当我们只想应用某个分支上的一个提交到当前分支时,可以使用cherry-pick命令,而不需要合并整个分支。
修复bug:当我们在一个分支上修复了一个bug,并希望将这个修复应用到其他分支上时,可以使用cherry-pick命令。
#比如修改完成 bug 分支,回到 master 分支进行合并 bug,然后记下 bug 分支的 commitID
#回到 dev 分支,使用 cherry-pick 命令将 dev 的 bug 修复,因为 bug 在 master 和 dev 同时存在
git cherry-pick 4c805e2
提取特定功能:当我们在一个分支上开发了一个新功能,并希望将该功能应用到其他分支上时
分支推送
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
如果是 git clone 下来的代码,不会有分支,需要以下操作创建对应远程分支以及关联远程远程分支才可以推送以及拉取,否则会报错,比如新同事加入
# clone 后面可以更改名称,自定义拉取下来文件夹名
git clone https://github.com/libgit2/libgit2 mylibgit
在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致;
git checkout -b branch-name origin/branch-nam
建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突
标签
#轻量标签(lightweight)与附注标签(annotated)两种
#区别在于附注标签会包含打标签的用户信息可以使用 gpg 签名认证 使用 -a 参数
git tag v1.4 -m "my version 1.0"
git tag
git tag v1.2 commitiID
git tag show v1.0
#必须手动推送标签
git push origin v1.5
#推送所有标签
git push origin --tags
#删除和远程删除
git tag -d v1.4
git push origin :refs/tags/v1.4 或者 git push origin --delete v1.4
本地库关联多个远程库
# 查看当前远程仓库,默认为 origin
git remote -v
#如果要发布到多个远程仓库,建议删除默认远程,当然您也可以不删除,继续使用 origin 名
#删除远程仓库
git remote rm origin
#关联多个仓库,或者与几个协作者合作,以 github 和 gitee 为例,名字你可以自定义
git remote add github git@github.com:michaelliao/learngit.git
git remote add gitee git@gitee.com:liaoxuefeng/learngit.git
#远程仓库重命名
git remote rename fix newfix
#移除远程仓库
git remote remove fix
#推送命令使用对应远程仓库
#推送到 github
git push github master
#推送到 gitee
git push gitee master
完结,感谢廖雪峰老师的 Git 教程