文章目录
git clone
git clone 可以将一个远程 Git 仓库拷贝到本地,让自己能够查看该项目,或者进行修改。
拷贝项目命令格式如下: git clone [url]
[url] 是你要拷贝的项目。
例如我们拷贝 Github 上的项目:
$ git clone https://github.com/tianqixin/runoob-git-test Cloning into 'runoob-git-test'... remote: Enumerating objects: 12, done. remote: Total 12 (delta 0), reused 0 (delta 0), pack-reused 12 Unpacking objects: 100% (12/12), done.
git tag
Git 支持两种标签:
- 轻量标签(lightweight)
- 附注标签(annotated)
轻量标签(lightweight)
轻量标签本质上是将提交校验和存储到一个文件中——没有保存任何其他信息。 创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字:
$ git tag <tagname> $ git tag
附注标签(annotated)
创建附注标签,在
git tag
指定-a <tagname>
,-m
选项指定存储在标签中的信息:git tag -a <tagname> -m "<message>" //创建带有注释的标签: $ git tag -a v1.4 -m "my version 1.4" //列出所有标签: $ git tag 通过使用 git show 命令可以看到标签信息和与之对应的提交信息:
共享标签
默认情况下,
git push
命令并不会传送标签到远程仓库服务器上。 在创建完标签后我们必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样——你可以运行git push origin <tagname>
。$ git push origin <tagname>
使用
--tags
选项可以将所有不在远程仓库服务器上的标签一次性传送到那里。$ git push origin --tags
注意: 使用
git push <remote> --tags
推送标签并不会区分轻量标签
和附注标签
。删掉标签
要删除掉本地仓库上的标签,可以使用命令
git tag -d <tagname>
:$ git tag -d <tagname>
删除远端标签:
git push origin --delete <tagname>
检出标签
如果想查看某个标签所指向的文件版本,可以使用
git checkout
命令, 虽然这会使我们的仓库处于“分离头指针(detached HEAD)”的状态——但是这个状态有些副作用:$ git checkout <tagname>
git config
我们可以通过git config来配置用户名和邮箱地址,便于我们将代码提交到远程仓库,具体格式如下:
git config --global user.name '你的用户名' git config --global user.email '你的邮箱'
git add
git add 命令可将文件添加到缓存,如新项目中,添加所有文件很普遍,可以使用如下命令:
git add .
注意:add有多种形式,可以add某个文件,某个文件夹,或直接add当前仓库下所有文件
git add 单个文件 git add 文件夹1/ 文件夹2/ ……多个文件夹之间空格隔开 git add .
有时候我们
add
之后又改了代码,所以想重新add
,但是之前add但是没有commit
的文件还在,想撤销怎么办呢?git status //查看已经add的 git reset . //撤销命令reset,此处表示撤销全部
git reset HEAD 命令用于取消已缓存的内容,如我们要取消已提交的test.txt文件,可以如下使用:(撤销单个文件)
git reset HEAD test.txt
git commit
git commit 将缓存区内容添加到仓库中,可以在后面加-m选项,以在命令行中提供提交注释,格式如下:
git commit -m "第一次版本提交" //文件从暂存区提交到版本库,其中" "内是对应提交的注释
如果你觉得 每次 commit之前要add一下,想跳过add这一步,可以直接使用 -a选项,如:
git commit -am "第一次版本提交"
我们可以创建一个文件,并将它添加打缓存,之后在提交,具体操作如下:
git stash
git stash ///暂存"工作现场" git stash list //查看保存的工作现场 git stash apply // 恢复工作现场,但是stash内容不删除,删除需要 git stash pop git stash pop //恢复工作现场的同时删除stash内容 常用git stash命令: (1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。 (2)git stash list :查看stash了哪些存储 (3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1} (4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p (5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} (6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1} (7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储 (8)git stash clear :删除所有缓存的stash
总结:
如果要应用这些stash,直接使用git stash apply或者git stash pop就可以再次导出来了。
git add 只是把文件加到git 版本控制里,并不等于就被stash起来了,git add和git stash 没有必然的关系,但是执行git stash 能正确存储的前提是文件必须在git 版本控制中才行。
常规 git stash 的一个限制是它会一下暂存所有的文件。有时,只备份某些文件更为方便,让另外一些与代码库保持一致。一个非常有用的技巧,用来备份部分文件:
- add 那些你不想备份的文件(例如: git add file1.js, file2.js)
- 调用 git stash –keep-index。只会备份那些没有被add的文件。
- 调用 git reset 取消已经add的文件的备份,继续自己的工作。
git rm
如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以如下使用:
git rm <file>
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm -f <file>
可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:
git rm –r * rm -rf .git/ //强制删除暂存文件
git branch/checkout
- git branch:查看分支命令
- git branch (branchname):创建分支命令
- git checkout (branchname):切换分支命令
- git merge:合并分支命令
- git branch -d (branchname):删除分支命令
git branch #查看分支
git branch -a #查看所有分支,包括远程和本地
git branch name #创建分支
git checkout name #切换分支到name
git checkout -b name #创建一个新的分支并且立即切换到它
git merge name #在分支master上合并分支name
git branch -d name #删除本地分支name
git push origin --delete name #删除远程分支
git pull/push
git fetch和git pull的区别:
git fetch:相当于是从远程获取最新版本到本地,不会自动合并。
git pull:相当于是从远程获取最新版本并merge到本地。
git push
git push 推送你的新分支与数据到某个远端仓库命令,格式如下:更新操作: $ git pull $ git pull origin 将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。 git pull origin master:brantest 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。 git pull origin master
git push 命令用于从将本地的分支版本上传到远程并合并。 命令格式如下: git push <远程主机名> <本地分支名>:<远程分支名> 如果本地分支名与远程分支名相同,则可以省略冒号: git push <远程主机名> <本地分支名> 以下命令将本地的 master 分支推送到 origin 主机的 master 分支。 $ git push origin master //等价于$ git push origin master:master 或git push -u origin master 如果origin端还不存在本地分支dev,想将本地分支推送到远端可以使用 git push --set-upstream origin dev 删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支: git push origin --delete master
git rebash/merge
在开发中经常需要基于一个分支来创建子分支,然后在子分支上进行开发,最后验证功能无问题才会将子分支合并到主分支上去。将子分支合并到主分支上一般有两种方案,分别为:
git merge
:这种合并会在对应的主分支上产生合并的提交,以及对应子分支的提交情况。git rebase
:这种合并是变基的操作,相当于将子分支的 commit 直接提交到主分支上,此时主分支上不会有合并记录和对应子分支的提交情况,看起来比较清爽。现将子分支
dev
的代码以git rebase
的方式合并到主分支main
上且不要留下合并的记录,此时相当于将子分支的所有 commit 提交到当前的主分支上。如下:B
,C
为主分支上的提交,D
,E
为子分支的提交,现在要将子分支的两笔 commit 合并到主分支上。初始时状态:
对子分支 dev 进行
git rebase
之后,子分支的 commit 就被合并到主分支上,此时主分支的提交记录如下图所示:
git rebase
流程# 1. 切换到主分支 main 上,其它分支的代码将被合并到该分支上 git checkout main # 2. 变基操作,对子分支 dev 进行变基操作,相当于将其所有的 commit 都提交到主分支(当前所在的分支)上去 git rebase dev # 3. 变基操作成功后,此时主分支上的代码选哟推送到远程代码仓中 git push
【注意事项】
git rebase
的分支是基于目标分支进行创建的。git rebase
可能会遇到冲突需要解决但是如果是多个人在维护主分支main时,自己维护分支dev1,如果自己分支超前main分支,r如果想将dev1分支修改的内容合并到main分支
则最好先同步一下main分支,即将dev1变基onto main 操作: git checkout dev1 git rebash main git push 此时dev1和main分支同基 然后将dev1修改合并到main分支 操作: git checkout main git merge dev1 git push
多人维护同一分支解决冲突安全方法
案例:A和B同时在一个分支开发
A:先于B提交
B想同步A的提交并解决与自己修改的冲突
1、先创建临时分支 git checkout -b dev-a 2、提交到本地,无需传到远端 git add . git commit 3、然后切换到原始分支,相当于原始分支未改动 git checkout dev-test 4、在本地dev-test分支拉取远端修改,此时本地dev-test与远端dev-test已经同步 git pull 5、切换到临时创建的分支 git checkout dev_a 6、进行变基操作,让临时分支与dev-test分支同步,同时需要解决冲突 git rebase dev-test 7、将临时分支合并到开发分支dev-test,并删除临时分支 git checkout dev-test git merge dev_a git branch -d dev_a
常见的操作命令:
参考:
Git 常用基本命令使用详细大全_git命令行-CSDN博客
git常用命令总结_git_一头小驴-GitCode 开源社区 (csdn.net)