git 常用操作指令

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 的一个限制是它会一下暂存所有的文件。有时,只备份某些文件更为方便,让另外一些与代码库保持一致。一个非常有用的技巧,用来备份部分文件:

  1. add 那些你不想备份的文件(例如: git add file1.js, file2.js)
  2. 调用 git stash –keep-index。只会备份那些没有被add的文件。
  3. 调用 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 fetchgit pull的区别:

  1. git fetch:相当于是从远程获取最新版本到本地,不会自动合并。

  2. git pull:相当于是从远程获取最新版本并merge到本地。

  3. 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为主分支上的提交,DE 为子分支的提交,现在要将子分支的两笔 commit 合并到主分支上。

 初始时状态:

对子分支 dev 进行git rebase 之后,子分支的 commit 就被合并到主分支上,此时主分支的提交记录如下图所示:

git rebase 流程
# 1. 切换到主分支 main 上,其它分支的代码将被合并到该分支上
git checkout main
 
# 2. 变基操作,对子分支 dev 进行变基操作,相当于将其所有的 commit 都提交到主分支(当前所在的分支)上去
git rebase dev
 
# 3. 变基操作成功后,此时主分支上的代码选哟推送到远程代码仓中
git push

【注意事项】

  1. git rebase 的分支是基于目标分支进行创建的。
  2. 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)

https://www.cnblogs.com/Jeffxu/p/17968795

Git教程学习:07 打标签_git 打标签-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值