-
首先在远程仓库(GitHub、Gogs、gitlab等)创建一个仓库
-
然后在本地项目初始化一个本地仓库(当前创建.git目录)
git init
git add .
- 将所有修改添加到暂存区(删除的文件除外),如果带参数 -u 则表示把被修改过或已删除文件添加到索引库, -a 则是被修改过或已删除文件和所有未跟踪的文件信息添加到索引库
git add README.md
- 将README.md文件添加到暂存区
git add src/*.js
- 将src下的所有js文件添加到暂存区
git commit -m "xxx描述"
- 将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中
git commit --amend
- 会使用与当前提交节点相同的父节点进行一次新的提交, 旧的提交将会被取消, 相当于重命名(i插入、:wq保存退出)
git commit --no-verify -m 'xxx描叙'
- --no-verify可以让我们忽略eslint、stylelint等代码检测的校验
git remote
- 要查看当前配置有哪些远程仓库, 会列出远程仓库名称, 例如origin,
-v(-verbose) 列出远程仓库名称和地址
git remote add origin https://github.com/xrwben/git-study.git
- 添加一个远程仓库名称和地址
git remote set-url origin http://xxx.git
- 修改远程仓库地址
git remote show origin
- 查看remote地址,远程分支,还有本地分支与之相对应关系等信息, git远程删除分支后,本地
git branch -a依然能看到的解决办法
git remote prune origin
- 删除了那些远程仓库不存在的分支
git push -u origin master
- 将本地的master分支推送到origin主机的master分支, -u选项指定一个默认主机, 后面使用可以不加任何参数使用
git push
git push --set-upstream origin master
- 同上, -u为省略形式, 表示如果当前分支与多个主机存在追踪关系, --set-upstream 选项会指定指定该主机为默认主机
git push --all origin
- 将多有的本地分支都推送到origin主机(origin即设置远程仓库的地址名称), 不管是否存在对应的远程分支都可以把分支推上去
git push --force origin
- 如果远程主机的版本比本地版本更新, 一定要推送, 可以使用 -–force 强推覆盖远程仓库
git push origin --tags
- git push不会推送标签(tag),除非使用 --tags 选项
git pull <远程主机名> <远程分支名>:<本地分支名>
- 将远程主机 origin 的 <远程分支名> 分支拉取过来,与本地的 <本地分支名> 分支合并
git pull origin master
- 等同于先
git fetch再git merge FETCH_HEAD, 如果不存在追踪信息, 则提示会跟push一样提示, 如果存在则可以省略表示git pull
git fetch
- 相当于是从远程获取最新版本到本地,不会自动合并
git status
- 显示工作目录和暂存区的状态, 此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到, 不显示已经commit到项目历史中去的信息
git log
- 查看日志详细信息
git difforgit diff --cachedorgit diff HEAD
- 查看更改详情 +表示有内容添加 -表示有内容删除, 上面分别表示[查看working tree与index file的差别]or[index file与commit的差别]or[working tree和commit的差别] 第一个命令和最后一个命令结果相同
git reflog
- 查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
git reset --soft HEAD~1
- 重设reset索引、暂存区, 工作目录更改的代码保持不变
git reset --hard HEAD~3
- 重设reset索引、暂存和工作目录, 更改的代码重置消失到commit初始状态
git reset --hard HEAD
- 相当于清空当前修改
HEAD 表示当前索引, HEAD^ 表示上一步, HEAD1(同HEAD^)、HEAD2、HEAD~3 表示撤销到到之前第几次提交
git reset --hard commitId
表示撤销到commitId记录的这次提交,commitId大概前六七位就可以了
git clone xxxxx
- 在git clone的时候, 所有本地分支默认与远程主机的同名分支建立追踪关系
git checkout -b 新建分支名
- 会在当前分支的基础(最近一次的commit)上新建一个分支, 并且切换到新分支
git checkout -m master
- 如果当前分支再test-branch-1且有本地没有暂存的修改, 则切换分支会报错提示,
-m标志将尝试三路合并, 把当前的未提交的本地修改合并过去, 这种情况极有可能产生冲突
git checkout .orgit checkout -- .
- 把当前目录所有修改但未add的文件从HEAD中签出并且把它恢复成未修改时的样子, 相当于撤销所有修改, 效果同
git reset --hard HEAD
git checkout -- a.js
- 撤销特定文件的修改
git checkout branch-name abc.js
- 把分支branch-name中的abc.js文件合并到当前分支
git merge branch-1 branch-2
- 合并分支branch-1和branch-2到当前分支, 要合并到哪个分支就要在哪个分支上把别的分支合并过来, 记得合并分支前要更新代码
git merge --abort
- 如果出现冲突不想处理冲突,想撤销合并可以使用该命令,--abort将恢复合并之前的状态
git branch
- 列出本地分支, 当前分支将以星号突出显示,
--list(默认) 列出本地分支,-r列出远程分支,-a本地和远程都列出来
git branch test-branch-new
- 新建分支, 但是不会切换到新建的分支,
git checkout -b test-branch-new会新建分支并且切换到新建分支
git branch -m test-branch-new test-branch-new-rename
- 修改分支名称,本地分支名修改推到远程相当于远程又创建了一个分支
git push origin --delete test-branch-new
- 删除某个远程分支,
origin为远程仓库的名字
git branch -d 分支名字
- 删除本地分支,注意当本地分支没有push到远程分支时会提示“The branch 'xxx' is not fully merged”,解决方法是大写-D
git stash
- 保存本地修改, 并恢复工作目录以匹配HEAD提交, --save(默认可省)
git stash poporgit stash apply stash@{2}
- 恢复到最近,如果想应用更早的储藏,可以通过名字指定它
git stash list
- 列出所储藏的修改
git stash drop stash@{$num}
- 删除stash@{$num}存储
git stash clear
- 删除所有缓存的stash存储
git tag
- 列出已有的标签
git tag -a v0.0.2 -m "tag-v0.0.2"
- 创建标签,
-a指定标签名字,-m标签说明
git push origin --tags | v0.0.2
- 推送本地新增的标签上去
git rebase origin
- 这些命令会把你的 mywork 分支里的每个提交(commit)取消掉, 并且把它们临时保存为补丁(patch)(这些补丁放到.git/rebase目录中),然后把mywork分支更新到最新的origin分支, 最后把保存的这些补丁应用到mywork分支上
git clean -df
- 删除当前目录下没有被track过的文件和文件夹
git revert <commitID>
- 反做版本,生成新的版本然后推到远程,很容易有冲突,要做好冲突处理