zoukankan      html  css  js  c++  java
  • [Git] Git 使用记录

    1. 配置git客户端

    1.1 安装git bash

    https://git-scm.com/downloads

    1.2 设置ssh Key

    查看是否有ssh key

    ls -al ~/.ssh
    

    没有则生成ssh key

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    

    将生成的公钥 (.pub为后缀) 上传到git网站上

    eval $(ssh-agent -s) //确定ssh-agent正在运行
    
    ssh-add ~/.ssh/id_rsa //添加ssh私钥到客户端
    
    ssh git@github.com //测试
    

    1.3 设置用户名和邮箱

    git config --global user.name "NAME HERE"
    git config --global user.email "aaa@qq.com"
    

    2. 管理项目

    2.1 本地已有项目

    在项目的目录下执行以下命令(git bash)初始化仓库

    git init
    

    项目下会多出.git文件夹(默认隐藏)

    将项目与远程仓库关联

    git remote add origin git@github.com:arcsinW/OpenHelloCDUTUWP.git
    
    git remote -v # 查看远程仓库
    

    提交更改

    git add .
    git commit -a -m "Initial commit"
    git push origin master
    

    或者

    git add .
    git commit -a # 接着在git bash 里的文本编辑器里写Commit message
    git push origin master
    

    2.2 从远程仓库获取项目

    git clone https://github.com/libgit2/libgit2 //获取master分支
    
    git clone -b dev https://github.com/libgit2/libgit2 // 获取dev分支
    

    2.3 分支

    git checkout -b dev # 新建并切换到dev分支
    
    git branch # 查看本地分支
    
    git branch -a # 查看远程分支
    
    git checkout master # 切换到master分支
    
    git merge dev # 合并dev分支到当前分支
    
    git branch -d dev # 删除dev分支
    
    git push origin --delete dev # 删除远程dev分支
    
    git checkout -b dev origin/dev # 从远程仓库拉取本地不存在的dev分支
    

    下图是在当前分支为signle_edition时执行git merge master时出现冲突的情况,IDE是VS Code

    <<<<<<< HEAD 到 =======的部分是当前分支single_edition的版本

    ======= 到 >>>>>>> master是master中的版本
    处理冲突就是手动选择保存哪个版本的代码

    处理好冲突后,使用add将该文件标记为已解决状态

    git add filename
    

    2.4 版本控制

    git rm --cached readme.txt # 将文件untrack,不删除文件
    
    git rm readme.txt # 将文件untrack并删除
    
    git log --pretty=oneline # 查看提交日志
    
    git --no-pager log # log不分页
    
    git reset --hard HEAD^ # 回退到上一commit
    
    git reset --hard [commit_id] # 回退到指定commit,commit_id只需写前几位,能唯一确定这个commit即可
    

    3. some solutions

    • refusing to merge unrelated histories

    加上--allow-unrelated-histories

    git pull origin master --allow-unrelated-histories
    
    • 修改提交到远程仓库的commit信息

    查看本地仓库的log信息,找到要修改的commit之前一个commit的id

    git log --pretty=oneline
    git rebase -i [commit_id]
    

    将要修改的commit信息前的pick改成edit

    git commit --amend #修改commit信息
    git rebase --continue
    git push -f origin master #覆盖远程仓库commit信息(也会覆盖其他人的提交)
    
    • 重新添加 .gitignore
    git rm -r --cached .
    git add .
    git commit -m "add .gitignore file"
    
    • 查看版本控制下的文件
    git ls-files
    
    • git stash

    当你想切换分支,但工作区还有未提交的代码,而这个代码还没写完不想提交,这时候可以把当前的工作状态暂时存储起来

    git stash  // 存储当前的变更
    
    git status // 工作区此时clean了
    
    git stash list // 查看所有的stash
    
    git stash apply stash@{0} // 恢复stash@{0}这个stash(由上一步获得)
    
    git stash show -p stash@{0} | git apply -R // 取消一个stash
    
    git stash branch testchanges // 在新分支中查看stash
    

    Reference

    1. https://git-scm.com/docs/
    2. git提交commit后push到远程仓库,如何修改commit信息
  • 相关阅读:
    针对上一篇文章中的代码,想出的重构方案(python实现)
    Android中的广播Broadcast详解
    Android中的Serialable和Parcelable的区别
    Java中的序列化Serialable高级详解
    Android中的Parcel机制(下)
    Android中的Parcel机制(上)
    Java中获取前一天和后一天时间
    Android中的Service详解
    Window 通过cmd查看端口占用、相应进程、杀死进程等的命令
    Java高新技术第三篇:注解的使用
  • 原文地址:https://www.cnblogs.com/arcsinw/p/9068722.html
Copyright © 2011-2022 走看看