Git基础命令,持续增加...

1、切换到远程分支

A) 查看远程分支
参数说明:
-a: 全部分支(本地+远程)
-v: verbose,将commitId与注释都冗余显示出来
.
git branch -av

 master                  64660433 Add new file
* prod                    afcd903c [behind 6] commit注释1
 test                    4cbc8d49 commit注释1
 test_new                c3ce99d9 commit注释1
 uat                     34dce62d 修改项目ReadMe说明文件
 remotes/origin/HEAD     -> origin/master
 remotes/origin/master   64660433 Add new file
 remotes/origin/prod     4cbc8d49 commit注释1
 remotes/origin/test     4cbc8d49 commit注释1
 remotes/origin/test_new c3ce99d9 commit注释1
 remotes/origin/uat      34dce62d 修改项目ReadMe说明文件

B) 切换到远程分支:
git checkout -t origin/dev

C) 本地查找并切换到远程分支上

新clone一个项目初,本地可能只有一个*master分支

查找所有分支(本地+远程):
$ `git branch -a`
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  remotes/origin/pro
  remotes/origin/uat
  除了master分支为绿色外, 其他应该为红色。

`本地新建分支dev,并将本地与远程分支映射上`
$ git checkout -b dev remotes/origin/dev
Updating files: 100% (3398/3398), done.
Switched to a new branch 'dev'
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

user@DESKTOP-123456 MINGW64 ~/IdeaProjects/project1 (dev)
$ git branch
* dev
  master

2、Git删除远程分支或文件

2.1 删除远程分支

语法:

git push origin :${BRANCH_NAME}

git push origin --delete ${BRANCH_NAME}
.
.
引申:删除本地分支 语法:
git branch -D ${LOCAL_BRANCH_NAME}
说明:删除本地分支前,需要切换至其他分支下,如当前在prod分支下,可以切换至test分支下,再执行删除本地prod分支操作。
.
举例:
$ git branch -D prod
Deleted branch prod (was 01d7a091).

样例:

$ git push origin :test_deploy_20201127
To https://git.company.com/bigData/shedudma.git
 - [deleted]         test_deploy_20201127

下面这种语法,效果一样:
$ git push origin --delete test_uat
To https://git.company.com/bigData/shedudma.git
 - [deleted]         test_uat


2.2 删除远程文件

说明 :
直接删除远程文件, 不影响本地文件.
原理:
先在本地分支上删除指定的文件,再将操作推送至远程分支。

D:\IdeaProjects\aaaa>git rm -r --cached aaaa.iml
rm 'aaaa.iml'

D:\IdeaProjects\aaaa>git commit -m "delete project's *.iml file"
[master 8d1b8fc] delete project's *.iml file
 1 file changed, 93 deletions(-)
 delete mode 100644 aaaa.iml

D:\IdeaProjects\aaaa>git push
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 231 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To ssh://xx.xx.xx.xx:port/xxdata/aaaa.git
   9bb6f15..8d1b8fc  master -> master

3、Git tag 操作

3.1 查看本地tag list

Administrator@WIN-SIMFTB9JNU1 MINGW64 /d/test/dockerutils (master)
$ git tag
v2019u0425
v2019u0605

3.2 创建本地tag

$ git tag -a v2019u0605 -m “v2019u0605”

引申:基于某个历史版本打tag
git tag -a v.1.0.0 -m “测试tag:未验收说明&6项履约开发前版本” aa4f6620

3.3 推送本地tag到远程Tags列表里

$ git push origin v2019u0605
Counting objects: 1, done.
Writing objects: 100% (1/1), 155 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To http://11.11.11.11/aidata/dockerutils.git
* [new tag] v2019u0605 -> v2019u0605

3.4 删除本地tag

$ git tag -d v2019u0605
Deleted tag ‘v2019u0605’ (was 35cd557)

3.5 推送本地删除到远程(即删除远程tag)

$ git push origin :refs/tags/v2019u0605
To http://11.11.11.11/aidata/dockerutils.git
- [deleted] v2019u0605

3.6 恢复本地误删除的文件

如在本人github项目python3_toturial下载到本地后,由于某种原因误删了com文件夹,

Administrator@WIN-SIMFTB9JNU2 MINGW64 /d/SourceCode/python3_toturial (master)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    com/__init__.py
        deleted:    com/david/__init__.py
        deleted:    com/david/tutorial/1-base/1.1-datatypevariable.py
        deleted:    com/david/tutorial/1-base/1.2-dict & set.py
        deleted:    com/david/tutorial/1-base/1.2-string&encoding.py
        deleted:    com/david/tutorial/1-base/1.3-list&tuple.py
        deleted:    com/david/tutorial/1-base/1.4-condition.py
        deleted:    com/david/tutorial/1-base/1.5-loop.py
        deleted:    com/david/tutorial/1-base/__init__.py
        deleted:    com/david/tutorial/2-function/2.1-invokefunc.py
        deleted:    com/david/tutorial/2-function/2.2-definefunc.py
        deleted:    com/david/tutorial/2-function/2.3-funcparams.py
        deleted:    com/david/tutorial/2-function/2.4-recurtionFunc.py
        deleted:    com/david/tutorial/2-function/__init__.py
        deleted:    com/david/tutorial/3-advancedFeatures/3.1-slice.py
        deleted:    com/david/tutorial/3-advancedFeatures/3.2-iter.py
        deleted:    com/david/tutorial/3-advancedFeatures/3.3-listComp.py
        deleted:    com/david/tutorial/3-advancedFeatures/3.4-generator.py
        deleted:    com/david/tutorial/3-advancedFeatures/__init__.py
        deleted:    com/david/tutorial/4-fp/1-highOrderFunc/4.1.1-mapreduce.py
        deleted:    com/david/tutorial/4-fp/1-highOrderFunc/4.1.3-sorted.py
        deleted:    com/david/tutorial/4-fp/1-highOrderFunc/__init__.py
        deleted:    com/david/tutorial/4-fp/2-returnfunc.py
        deleted:    com/david/tutorial/4-fp/4.3-anonymousFunc.py
        deleted:    com/david/tutorial/4-fp/4.4-decorator.py
        deleted:    com/david/tutorial/4-fp/4.5-partialFunc.py
        deleted:    com/david/tutorial/4-fp/__init__.py
        deleted:    com/david/tutorial/5-modules/5.1-useModule.py
        deleted:    com/david/tutorial/5-modules/__init__.py
        deleted:    com/david/tutorial/__init__.py
        deleted:    com/david/tutorial/test.py

no changes added to commit (use "git add" and/or "git commit -a")

此时尝试重新拉取代码,实验证明无效果,无法将com文件夹从github服务器上再下载下来。

Administrator@WIN-SIMFTB9JNU2 MINGW64 /d/SourceCode/python3_toturial (master)
$ git pull
Already up-to-date.

正确的恢复步骤如下:
①、重置指针到头部位置:git reset HEAD ${错误删除的文件[夹]}

Administrator@WIN-SIMFTB9JNU2 MINGW64 /d/SourceCode/python3_toturial (master)
$ git reset HEAD com
Unstaged changes after reset:
D       com/__init__.py
D       com/david/__init__.py
D       com/david/tutorial/1-base/1.1-datatypevariable.py
D       com/david/tutorial/1-base/1.2-dict & set.py
D       com/david/tutorial/1-base/1.2-string&encoding.py
D       com/david/tutorial/1-base/1.3-list&tuple.py
D       com/david/tutorial/1-base/1.4-condition.py
D       com/david/tutorial/1-base/1.5-loop.py
D       com/david/tutorial/1-base/__init__.py
D       com/david/tutorial/2-function/2.1-invokefunc.py
D       com/david/tutorial/2-function/2.2-definefunc.py
D       com/david/tutorial/2-function/2.3-funcparams.py
D       com/david/tutorial/2-function/2.4-recurtionFunc.py
D       com/david/tutorial/2-function/__init__.py
D       com/david/tutorial/3-advancedFeatures/3.1-slice.py
D       com/david/tutorial/3-advancedFeatures/3.2-iter.py
D       com/david/tutorial/3-advancedFeatures/3.3-listComp.py
D       com/david/tutorial/3-advancedFeatures/3.4-generator.py
D       com/david/tutorial/3-advancedFeatures/__init__.py
D       com/david/tutorial/4-fp/1-highOrderFunc/4.1.1-mapreduce.py
D       com/david/tutorial/4-fp/1-highOrderFunc/4.1.3-sorted.py
D       com/david/tutorial/4-fp/1-highOrderFunc/__init__.py
D       com/david/tutorial/4-fp/2-returnfunc.py
D       com/david/tutorial/4-fp/4.3-anonymousFunc.py
D       com/david/tutorial/4-fp/4.4-decorator.py
D       com/david/tutorial/4-fp/4.5-partialFunc.py
D       com/david/tutorial/4-fp/__init__.py
D       com/david/tutorial/5-modules/5.1-useModule.py
D       com/david/tutorial/5-modules/__init__.py
D       com/david/tutorial/__init__.py
D       com/david/tutorial/test.py

②、重新检出:git checkout ${错误删除的文件[夹]}

Administrator@WIN-SIMFTB9JNU2 MINGW64 /d/SourceCode/python3_toturial (master)
$ git checkout com

Administrator@WIN-SIMFTB9JNU2 MINGW64 /d/SourceCode/python3_toturial (master)
$ ll
total 0
drwxr-xr-x 1 Administrator 197121 0 十一  8 16:55 com/

4、Git merge 操作

4.1 开发分支合并到master

git checkout dev
git pull
git checkout master
git merge dev
git push -u origin master

4.2 master的提交变动更新到开发分支上

git checkout master 
git pull 
git checkout dev
git merge master 
git push -u origin dev

4.2 git merge撤销

①、如果使用 git merge 操作,但还未 add 时,取消merge命令:
$ git merge --abort

②、如果已经执行git add了,取消merge命令:
步骤 1)
$ git merge --reflog 
这将显示所有历史操作记录。
步骤 2)
$ git reset --hard ${COMMIT_ID}

之后即可回退到merge之前的状态。

5、Git提交已修改的代码到新分支

需求背景:

因项目需求优化需要,代码是从origin的dev clone下来的,就直接在本地修改代码,单因为特殊原因不希望dev分支被修改掉:
.
不对dev分支做任何修改(有的项目创建分支时禁止提交修改的代码到主分支上);
将新的代码push到新的分支上去
我们可以这样做:

查看现在所在的分支

git branch

查看本地代码状态

git status

提交当前修改到本地

git add .
git commit -m ‘modify and init in new branch’

push到新的分支:new_dev

git push origin dev:dev_new

切换到新的分支

git checkout dev_new

这时可以去gitlab远程上查看新建的new_dev分支,你修改的代码也已经提交上去啦!

6、Git回退到历史版本

适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
git log
git reset --hard 目标版本号

案例:
回退代码到指定的commitId处(如回退到注释“添加数据源备注”位置):
在这里插入图片描述
随后执行:
$ git reset --hard fcc9f69b070f8a0aae9fb853d7db35b3bad9f641
在这里插入图片描述
GUI方式(已IDEA工具为例)的Reset回滚操作如下:
在这里插入图片描述

7、checkout后关联远程分支

从git上checkout到本地后,在执行git pull拉取远程变动到本地前,需要先与远程分支做关联。

$ git checkout test_new

$ git branch --set-upstream-to=origin/test_new
Branch 'test_new' set up to track remote branch 'test_new' from 'origin'.

第二条命令为本地关联远程分支的命令,如果没有执行,可能会报如下错误:

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> uat

8、git从已有分支上创建新分支

开发过程中,经常需要用到已有分支上创建新分支的情况,如从master分支copy一个开发分支dev。
那么久可以使用如下命令行完成这个流程:

1)、切换到被copy的分支(master),并且从远端拉取最新版本
$git checkout master  

2)、$git pull  
从当前分支拉copy开发分支

3)、$git checkout -b dev  
Switched to a new branch 'dev'  
把新建的分支push到远端

4)、$git push origin dev 
拉取远端分支

5)、$git pull  
There is no tracking information for the current branch. 
Please specify which branch you want to merge with. 
See git-pull(1) for details.  
git pull <remote> <branch>  
If you wish to set tracking information for this branch you can do so with: 
 git branch --set-upstream-to=origin/<branch> dev 

经过验证,当前的分支并没有和本地分支关联,根据提示进行下一步进行本地分支与远程分支的关联映射:
 6)、$git branch --set-upstream-to=origin/dev 

再次拉取 验证
 7)、$git pull

9. error: Your local changes to the following files would be overwritten by merge

9.1 该错误经查发生的场景如:

  • 团队其他成员修改了某些文件并已先于你提交入库
  • 你在pull之前修改了本地这些文件(或集合中的某个),等你修改完代码再pull时,报错提示出来了

9.2 解决方案

1、 保留修改
执行以下三条命令

#封存你工作区的修改

  • git stash

#拉取远程上别人的最新代码

  • git pull origin master

#本地修改还原出来

  • git stash pop

注:

  • git stash:备份当前工作区内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前工作区内容保存到Git栈中
  • git pull:拉取服务器上当前分支代码
  • git stash pop:从Git栈中读取最近一次保存的内容,恢复工作区相关内容。同时,用户可能进行多次stash操作,需要保证后stash的最先被取到,所以用栈(先进后出)来管理;pop取栈顶的内容并恢复
  • git stash list:显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
  • git stash clear:清空Git栈

2 废弃本地修改

核心思想就是版本回退,具体命令如下

  • git reset --hard
  • git pull origin master

操作请三思:
一般不建议使用第二种, 除非你认定本地修改无需再保存

10、git checkout语法

在日常的git操作中,git checkout (检出),是我们的常用命令。最为常用的两种情形是:

  • 创建分支
  • 切换分支
$ git checkout -h
usage: git checkout [<options>] <branch>
   or: git checkout [<options>] [<branch>] -- <file>...

    -b <branch>           create and checkout a new branch
    -B <branch>           create/reset and checkout a branch
    -l                    create reflog for new branch
    --guess               second guess 'git checkout <no-such-branch>' (default)
    --overlay             use overlay mode (default)
    -q, --quiet           suppress progress reporting
    --recurse-submodules[=<checkout>]
                          control recursive updating of submodules
    --progress            force progress reporting
    -m, --merge           perform a 3-way merge with the new branch
    --conflict <style>    conflict style (merge or diff3)
    -d, --detach          detach HEAD at named commit
    -t, --track           set upstream info for new branch
    -f, --force           force checkout (throw away local modifications)
    --orphan <new-branch>
                          new unparented branch
    --overwrite-ignore    update ignored files (default)
    --ignore-other-worktrees
                          do not check if another worktree is holding the given ref
    -2, --ours            checkout our version for unmerged files
    -3, --theirs          checkout their version for unmerged files
    -p, --patch           select hunks interactively
    --ignore-skip-worktree-bits
                          do not limit pathspecs to sparse entries only
    --pathspec-from-file <file>
                          read pathspec from file
    --pathspec-file-nul   with --pathspec-from-file, pathspec elements are separated with NUL character

参考列表:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值