GIT——基本操作

一、配置用户名和邮箱

  • 告诉git你是谁

    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
    

  • 如果没有配置的话,在提交文件时,会报错

二、创建版本库

在创建的文件夹中鼠标右键 “Git Bash Here”,即可在当前文件夹中打开Git

  • 创建 learngit 文件夹
    打开 learngit 文件夹
    浏览当前文件夹

    $ mkdir learngit
    $ cd learngit
    $ pwd
    
  • 将这个目录变成Git可以管理的仓库

    $ git init
    

  • 将文件夹(工作区)下的readme.txt放置在暂存区

    $ git add readme.txt
    

  • 将暂存区的readme.txt放置到当前分支

    $ git commit -m "wrote a readme file"
    


三、版本回退

  • 多次提交修改后的readme.txt文件

  • 查看版本历史记录

    • 详细记录
    $ git log
    

    • 简略记录
    $ git log --pretty=oneline
    

    注:57af97d9c7a1360d736fa89140f0399ec3abfa06 这些序列号是commit id(版本号)

  • 在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。

  • 回退到上一个版本

    $ git reset --hard HEAD^
    

  • 查看当前readme.txt的内容

    $ cat readme.txt
    

  • 回退之后,如何再回来?
    只要上面的命令行窗口还没有被关掉,只要找到之前的commit id就可以回到未来某个版本
    版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

    如果命令行窗口关掉了,也可以找到commit id,git reflog可以记录每一次命令

四、查看git状态

 $ git status

1.txt 没有add,只放在了工作区
license.txt add但没有commit,放在了暂存区,但未提交存入节点

五、管理修改

Git跟踪并管理的是修改,而非文件
git add会将文件的修改放到暂存区
若在git add之后又修改了文件,再git commit,git提交的是之前版本的修改

六、撤销修改

  • readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    使用以下命令,会将工作区的修改全部撤销

    $ git checkout -- readme.txt
    

  • readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    使用以下命令,会将暂存区的修改回退到工作区

    $ git reset HEAD <file>
    

七、删除文件

  • 删除工作区文件

    $ rm readme.txt
    
  • 删除暂存区文件

    $ git rm readme.txt
    
  • 将删除操作提交到版本库

    $ git commit -m "del readme.txt"
    

  • 若误删工作区文件,可从版本库中调出至工作区
    git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

    $ git checkout -- 1.txt
    

八、创建分支并合并

  • 创建dev分支,然后切换到dev分支

    $ git checkout -b dev
    
    $ git switch -c dev
    
  • git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

    $ git branch dev
    $ git checkout dev
    

  • 列出所有分支,当前分支前面会标一个*号

    $ git branch
    
  • 切换到已有的mster分支

    $ git checkout master
    
    $ git switch master
    
  • 合并分支
    直接把master指向dev的当前提交

    $ git merge dev
    

  • 删除分支

    $ git branch -d dev
    

九、分支冲突

  • master分支和dev分支的readme.txt文件第二行有冲突

  • 强行合并,会报冲突

    $ git merge dev
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.
    
  • 查看状态

  • 查看readme.txt文件
    Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

  • 手动修改后,再提交

  • 通过git log查看分支合并情况
    用git log --graph命令可以看到分支合并图。

    $ git log --graph --pretty=oneline --abbrev-commit
    

  • 删除dev分支

十、分支管理策略

  • 默认使用Fast forward模式
    这种模式下,删除分支后,会丢掉分支信息

  • 不使用Fast forward模式
    从分支历史上就可以看出分支信息
    --no-ff参数,表示禁用Fast forward
    本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去

    $ git merge --no-ff -m "merge with no-ff" dev
    


  • 分支策略

十一、BUG分支

https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
需要注意一下

dev合并bug分支的时候
要先复制一个特定的提交到当前分支

$ git cherry-pick 4c805e2

再将dev存储的工作现场弹出来

git stash pop

十二、Feature分支

添加一个新功能时,肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支

  • 删除未合并的分支

    $ git branch -D feature-01
    
    Administrator@Y027 MINGW64 /f/gittest (dev)
    $ git branch -d feature-01
    error: The branch 'feature-01' is not fully merged.
    If you are sure you want to delete it, run 'git branch -D feature-01'.
    
    Administrator@Y027 MINGW64 /f/gittest (dev)
    $ git branch -D feature-01
    Deleted branch feature-01 (was 3030047).
    

十三、标签管理

  • 打标签

    • 最后提交的当前分支

      $ git tag v1.0
      

    • 之前提交的分支

      $ git tag v0.9 0411011
      

  • 创建带有说明的标签,用-a指定标签名,-m指定说明文字

    $ git tag -a v0.99 -m "version 0.1 released" 0411011
    

  • 用命令查看所有标签

    $ git tag
    

  • 查看单独版本的具体信息

    $ git show v0.99
    

  • 删除标签

    $ git tag -d v0.9
    

  • 标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

十四、本地连接gitlab远程库

远程连接使用ssh,首先查看有没有ssh

ssh cd ~/.ssh

(1) 在本地生成ssh密钥

在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,将公钥的内容copy到gitlab的SSH密钥中添加即可。

$ ssh-keygen -t rsa -C "Youremail@example.com"


(2) 将远程仓库克隆下来

先在gitlab中创建一个名字叫lerngit的project

将远程仓库克隆到本地

git clone git@192.168.2.114:zhanghaoxiang/lerngit.git

(3) 将本地库内容推送到远程库上

在本地提交工程后

第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

$ git push -u origin master



后面就可以直接用

$ git push origin master


(4) 解除本地与远程库的关系

$ git remote rm origin

(5) 查看远程库信息

$ git remote -v

(6) 删除远程库

gitlab setting->general->advanced->Remove project

(7) 与远程库建立连接关系

$ git remote add origin git@192.168.2.114:zhanghaoxiang/lerngit.git

(8) 远程分支管理

  • master分支是主分支,要时刻与远程同步

  • dev分支是开发分支,团队所有成员都需要在上面工作,也需要与远程同步

  • bug分支只用于在本地修复bug,没必要推到远程

  • feature分支是否推到远程,取决于是否需要合作在上面开发

  • 如果远程分支冲突了,需要抓取分支

    • 分别在两个文件夹(lerngit,lerngit1)中克隆同一个远程库中的文件

    • lerngit1从远程库clone时,默认情况是只有master分支的

    • lerngit2要在dev分支上开发,就必须创建远程origin的dev分支到本地

      $ git switch -c dev origin/dev
      

    • 将更改后的readme.md提交并推送到远程库

    • lerngit 同样在dev分支对readme.md文件进行了修改,并提交推送到远程库。在推送远程库时,出现报错,lerngit2最新提交的dev分支与lerngit提交的dev分支有冲突

    • 将最新提交的origin/dev抓取下来,在本地合并解决冲突再提交,在抓取之前需要指定本地dev分支与远程origin/dev分支的链接。git pull相当于是git fetch + git merge

      $ git branch --set-upstream-to=origin/dev dev
      $ git pull
      

    • pull成功后,合并有冲突,需要手动解决再提交并推送到远程


(9) 变基操作

$ git rebase dev

  • rebase之前
  • rebase之后

只对尚未推送或分享给别人的本地修改执行变基操作清理历史;从不对已推送至别处的提交执行变基操作

regbase参考链接:https://blog.csdn.net/michaelshare/article/details/79108233

(10) 远程标签管理

  • 标签推送
    • 推送单个标签
      $ git push origin v1.4
      

    • 推送全部未推送过的本地标签
      $ git push origin --tag
      

十五、参考链接

posted @ 2022-07-10 22:01  AdriftCore  阅读(77)  评论(0编辑  收藏  举报