git基本使用

github

打开git bash(右键菜单Git Bash Here)

# 生成rsa公钥和私钥 - Enter到底 -C 后面是备注信息
>> ssh-keygen -t rsa -C "xxxx@email.com"
(或者ssh-keygen -t ed25519 -C xxxx@email.com -f github_id_ed25519)
/* 
    . 找到C:\Users\[用户名]\.ssh目录下id_rsa和id_rsa.pub;
    . 用文本工具打开id_rsa.pub,全选复制;
    . 登录github,settings > SSH and GPG keys > New SSH key
    . Title随便写,key粘贴刚复制的内容;
*/
# 测试连接
>> ssh -T git@github.com
# 配置信息
>> git config --global user.name "your name"
>> git config --global user.email "your_email@youremail.com"

第一次git push 会有如下提示:

 

注意:切换其他账号时,需在【控制面板 - 用户账户 - 凭据管理器 - Windows凭据】将github信息删掉

gitee

提示:此处针对基于github配置上再配置gitee

打开shell

#
>> cd ~/.ssh
>> ssg-keygen -t rsa -C "xxxx@email.com" -f "gitee_id_rsa"
/* 
    . 找到~/.ssh目录下gitee_id_rsa和gitee_id_rsa.pub;
    . 用文本工具打开id_rsa.pub,全选复制;
    . 登录gitee,设置 > SSH公钥 > 添加公钥
    . Title随便写,key粘贴刚复制的内容;
*/

# 配置github和gitee(在~/.ssh目录)
>> vi config

# 测试连接 - 是否显示successfully
>> ssh -T git@gitee.com

 config内容:

# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa

# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa

git图

git命令

  • git init
  • git config
  • git add
  • git rm
  • git status
  • git commit
  • git push
  • git pull
  • git log
  • git diff
  • git branch
  • git checkout
  • git remote
  • git reflog
  • git clean
  • git merge
  • git rebase
  • git reset
  • git submodule
  • git stash

git init

初始化一个空的git本地仓库,                   如git init

新建一个目录,将其初始化为Git代码库,如git init <project-name>

安静模式-q | --quiet,也适用于其他命令

初始化一个无工作区的git裸仓库              如git init --bare

裸仓库生成.git目录里面的东西,相当于只有本地仓库里面.git里面的东西,一般类似于test.git

git config

  1. 仓库级别 local 【优先级最高】
  2. 用户级别 global【优先级次之】
  3. 系统级别 system【优先级最低】

列出Git可以在该处找到的所有的设置,   如 git config --list

获取特定项目的特定的关键字目前的值,如 git config user.name

设置特定项目的特定的关键字目前的值,如 git config user.name zhou

本地设置特定的关键字目前的值,           如 git config --local user.name zhou

全局设置特定的关键字目前的值,           如 git config --global user.name zhou

禁止git自动将LF转化成CRLF,               如 git config --global core.autocrlf false

拒绝提交包含混合换行符的文件,           如git config --global core.safecrlf true   

允许提交包含混合换行符的文件,           如git config --global core.safecrlf false   

提交包含混合换行符的文件时给出警告,如git config --global core.safecrlf warn

git add

将文件添加到暂存区(索引),                                如git add test1.txt test2.txt hello* hello?

将当前目录所有文件都添加到暂存区,                     如git add .

将所有修改的新增的删除的未跟踪的添加到暂存区,如git add -A

将所有修改的删除的添加到暂存区,                         如git add -u

添加每个变化前,都会要求确认,                             如git add -p

添加已被 .gitignore 忽略的文件/文件夹                     如git add -f

git rm

说明:从工作区和索引中删除文件

删除工作区并停止跟踪此文件,                                如git rm test1.txt test2.txt

停止跟踪此文件但不删除工作区文件                         如git rm --cached test1.txt test2.txt

删除目录                                                                    如git rm <目录名> -r

git status

显示工作目录和暂存区的状态。

使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到.

git status -s 简化显示信息

git commit 

-m :  提交的注释信息

-a : 直接将修改过的或删除操作的文件提交到本地仓库

--amend: 追加提交,不增加commit-id

--help : 提交帮助

git tag

标记当前HEAD指针

git tag

git tag -a "test_tag_1" -m "test tag 1"

git push origin tag test_tag_1

git push

git push <远程主机名> <本地分支名>:<远程分支名>

说明::<远程分支名>省略表示远程分支名为与本地分支名同名的远程分支名

如git push origin master

指定默认跟踪关联远程分支用-u,以后直接就可以用git push了,如git push -u origin master 有待验证

git pull

git pull <远程主机名> <远程分支名>:<本地分支名>

说明::<本地分支名>省略表示本地分支名为本地当前分支名

如git pull origin master

git log

查看提交记录

--pretty=oneline : 只显示commit-id和备注信息

--oneline:只显示commit-id简单形式和备注信息

--author="" 按author过滤显示

--grep=""    按关键字过滤显示

git diff

用于比较两次修改的差异

未add之前,比较指定文件修改前后,                      如git diff <文件名>

比较暂存区差异                                                            如 git diff --cached

add之后,未commit之前,比较指定文件修改前后,如git diff HEAD <文件名>

commit之后,比较指定文件修改前后,                    如git diff HEAD^ <文件名> 或 git diff HEAD~1 <文件名>

commit之后,比较指定文件指定版本修改前后,      如git diff HEAD~3 <文件名>

比较本地分支,当前分支减去指定分支差异                如git diff  <指定分支>

比较远端分支,当前分支减去远端分支差异                如git diff  origin/<远端分支>

git branch

创建一个本地分支,如git branch <分支名称>

删除一个本地分支,如git branch -d <分支名称>

查看所有分支名称,如 git branch -a

查看远程分支名称,如 git branch -r

修改本地分支名称,如 git branch -m <旧分支名称> <新分支名称>

删除远程分支名称,如 git push origin --delete <分支名称> 或者git push origin :<分支名称>

查看分支关联信息,如 git branch -vv

git checkout

切换分支,                             如git checkout <分支名称>

创建并切换分支到指定起点,如git checkout -b <分支名称> <commit-id简写> 

(起点可以是之前删除的同名的一个提交点)

恢复工作树文件,如git checkout <commit_id>  <file_name>

恢复上一次本地提交文件,   如git checkout --  <file_name>

恢复当前目录所有文件,      如git checkout --  .

HEAD指针游离(detached)如git checkout <commit-id>

(HEAD游离会创建匿名分支,可通过切换分支来恢复,匿名分支会消失)

git remote

说明:管理一组跟踪的存储库

列出已经存在的远程分支,                                        如git remote

列出详细信息,在每一个名字后面列出其远程url,    如git remote -v

添加一个新的远程,                                                   如git remote add <远程主机名> <仓库地址>

git reflog

查看操作记录

每行记录都由版本号,HEAD值和操作描述三部分组成。版本号在第一列,HEAD值在第二列,操作描述信息在第三列。

HEAD值用来标识版本,但是不同于版本号的是,Head值是相对的。
HEAD值为HEAD时,表示为提交的最新版本;
HEAD^ 表示为最新版本的上一个版本;
HEAD^^表示为最新版本的上上个版本;
HEAD~100表示为最新版本的往上第100个版本。

git clean

显示要删除的文件和文件夹, 如git clean -n

删除未跟踪的文件,               如git clean -f

删除未跟踪的文件和目录,    如git clean -df

删除git忽略文件,                  如git clean -xf

删除git忽略文件和目录           如git clean -xdf

(n - 显示要删除项     f - 强制删除     d - 删除项包含目录     x - 删除git配置中忽略项  X - 只删除git配置中忽略项)

同时删除内部.git的代码目录  如git clean -xdff(未被管理的.git文件夹,第二个-f表示的意义)

排除指定文件删除,              如git clean -xdf -e *.filter

git merge

(merge分支时若遇到冲突合并会产生一个合并commit,并且能恢复任意commit,缺点是污染commit记录)

将指定分支合并到当前分支,如git merge <分支>

处在合并分支的过程中放弃,如git merge --abort

处在合并分支的过程中修改冲突后,直接git add -u 和git commit,产生合并commit

git rebase

合并提交记录和合并分支(不会产生合并记录)

将最近n调记录合并到一起 ,如git rebase -i HEAD~4

将指定分支合并到当前分支,如git merge <分支>

调出编辑模式合并记录窗口,如git rebase --edit-todo

开始完成rebase过程,          如git rebase --continue

放弃完成rebase过程,          如git rebase --abort

git reset

重置索引区和工作区目录       如git reset --hard <commit-id>

保留工作目录,清空暂存区,如git reset --mixed <commit-id> (默认模式)

将文件从暂存区撤销,          如git reset --mixed HEAD <文件>

保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区,如git reset --soft <commit-id>

git submodule

git submodule add -- <repository> <path>              #添加子模块
git submodule add -b <分支名> -- <repository> <path>   #添加指定分支子模块
git submodule init                                    #初始化子模块
git submodule update                                  #更新子模块
git submodule deinit -f <path>                        #移除子模块,从.git/config中移除
git submodule update --init -- <path>                 #单独更新子模块
git submodule update --init --recursive -- <path>     #单独更新子模块(包括它的子模块)
git submodule status

git stash

备份当前工作区修改内容       如git stash

恢复并合并添加到暂存区       如git stash pop

查看所有保存的记录列表       如git stash list

删除所有缓存的stash            如git stash clear

应用某次存储                         如git stash apply stash@{1}

丢弃某次存储                         如git stash drop stash@{1}

git rev-list

按时间倒序列出commitid       如git rev-list --all

查看commitid提交个数           如git rev-list --all --count

git show

查看某次提交的内容               如git show <commit-id>

.git

  本地项目git管理根目录下都会有一个.git的隐藏文件夹,即git目录

  PS: 另外有.git文件(区别于.git目录),指明.git目录的相对目录位置

  .git内容如下:

gitdir: ../../.git/modules/xxx/xxx

 HEAD

  查看HEAD信息

>> cat .git/HEAD
可能的结果:     ref:refs/heads/master
>> cat .git/refs/heads/master
结果:          master分支最后一次提交的commit-id

 config

  查看config信息(保持本地user.name等)

>> cat .git/config
可能的结果:
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true

  remote配置

>> git remote add origin https://github.com/***/***.git
可能的结果:
[remote "origin"]
        url = https://github.com/***/***.git
        fetch = +refs/heads/*:refs/remotes/origin/*

  branch配置

>> git branch --set-upstream-to=origin/<远程分支> <本地分支>
可能的结果:
[branch "master"]
        remote = origin
        merge = refs/heads/master

  rebase配置 

[branch "<bash分支名>"]
        rebase = true
// 或者
[branch]
        autosetuprebase = always

  - 这样没错git pull就会默认带上--rebase

  submodule配置

  - 每个子模块在该文件夹都有对应的目录git配置

>> git submodule update --init -- <path>
可能的结果:
[submodule "<path>"]
	url = https://github.com/***/***.git

  info/exclude

   忽略提交规则文件,同.gitignore

  info/sparse-checkout

   指定要检出的目录和文件(前提是 git config core.sparsecheckout true),如下

windows/bin 
windows/text-3rdpart.cmake 
CMakeLists.txt 

   最后git pull origin <分支名>

  modules目录

   每个子模块在该文件夹都有对应的目录git配置

   在对应的目录下存放子模块git配置,如1/2下有子模块,原本2下的.git目录中文件全部存放在.git/module/1/2下

操作

▶ 拉取指定文件

git init <项目名>
cd <项目名>
git checkout -b <分支名>
git remote add -f origin <*.git>
git config core.sparsecheckout true
echo <检出文件路径> >> .git/info/sparse-checkout
git pull origin <分支名>
# 或者
# git branch --set-upstream-to=origin/<远程分支> <本地分支>
# git pull

▶ 避免合并提交日志(有待验证

  1.     pull在每次提交前,若发现有文件重贴或者冲突,停止pull;
  2.     commit提交;
  3.     git pull --rebase,若有冲突会停止,此时需要手动修改;
  4.     git add ***,手动修改后添加;(这次不用commit)
  5.     git rebase --continue,然后继续重新应用;也可以放弃应用回到原始状态;
  6.     git rebase --abort,放弃重新应用,回到rebase前的状态;

   (说明:git pull --rebase原理,先把暂存区修改记录保存到rebase下,回到修改前状态,拉代码合并,在将修改的记录从rebase取出,在通过补丁方式打入到合并后代码中,并产生一次提交记录,废弃pull前的原来提交记录,若产生者冲突,要求手动修改,然后继续合并代码,合并成功后再push代码,最后到分支记录也只有一次提交记录)

▶ 只检索出指定文件和目录

     # 详细步骤

  1. cd <工程目录>
  2. git init
  3. git remote add -f origin <.git地址>
  4. git config core.sparsecheckout true
  5. echo readme.md >> .git/info/sparse-checkout
  6. git pull origin <远程分支名>:<本地分支名>

注意

关于git中 -- 没有看到明确的说明,我的理解就是分隔符,前后解析不一样,同时能避免歧义

比如:git checkout aa 和 git checkout --  aa 前者表示切换分支后者表示恢复aa文件项

参考

官方文档

易百教程 Git教程™

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值