Git 常用命令

一、配置相关

- 检查配置信息:列出所有 Git 配置
  git config --list
  
- 查看所有的配置以及它们所在的文件
  git config --list --show-origin
  
- 查询 Git 中该变量的原始值,它会告诉你哪一个配置文件最后设置了该值
  git config --show-origin rerere.autoUpdate
  
- 获取帮助手册
  git help config
  
- 获得更简明的帮助输出
  git add -h
  
- 设置你的用户名和邮件地址 
  git config --global user.name "John Doe"
  git config --global user.email johndoe@example.com

二、常用命令

基础命令

  git add .
  git commit -m "..."
  git pull --rebase
  git push

其他命令

- 查看操作记录
  git reflog
  
- 把hash前六位的commit 应用到现有分支中
  git cherry-pick [hash前6位]
  
- 把多条commit合并到一条
  git rebase -i [a6d089177f47bf]
  
- 基于develop创建一个feature_branch分支
  git checkout -b feature_branch develop
  
- 基于某个远程分支新建本地分支  
  git checkout -b <BranchName>  origin/master
  例如:git checkout -b my_branch origin/my_branch
  
- 把当前分支推送到远程指定分支(不同分支名)
  git push origin mcvadvancedSearch:mc-dev

- 将在其他分支上的 commit 修改,移植到当前的分支
  git cherry-pick <commitHash>

三、分支相关

查看分支

git branch 		// 查看本地已有的分支
git branch -a 	// 查看本地和远程已有的分支

查询分支创建时间

git reflog show --date=iso 'branch_name'

创建分支 本地检出一个新的分支并推送到远程仓库

git checkout -b 新分支名
git push --set-upstream origin 分支名 // 推送本地分支到远程仓库

将远程git仓库里的指定分支拉取到本地(本地不存在的分支)

git checkout -b 本地分支名 origin/远程分支名

- 如果出现提示:
  fatal: Cannot update paths and switch to branch 'dev2' at the same time.
  Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
  表示拉取不成功。我们需要先执行
  git fetch
  然后再执行
  git checkout -b 本地分支名 origin/远程分支名

将本地分支推送到远程仓库(远程仓库没有该分支)

git push origin local_name:remote_name

合并分支

- 当前分支为dev:把prod的内容合并入dev分支
  git merge 'prod'

删除分支

git branch -d 分支名

四、commit方法

修改最后一次commit的信息

- 修改 commit 注释信息

    git commit -ament
    
    出现修改注释信息的界面, 输入 i 进入修改模式,修改好注释后,按 Esc 键 退出编辑模式,输入 :wq 保存并退出。
    
    注:注释信息一般显示在第一行,窗口下面第一个字符是 # 的内容不需要修改

- 修改作者、邮箱
    git commit --amend --author="{username} <{email}>"
    例如:git commit --amend --author=“silinchen <silinccc@gmail.com>”

- 撤销上一次commit(删除commit记录、改动的数据回退到暂存区)
    git reset --soft HEAD~1  

修改某几次commit的信息

- 使用 log 查看提交记录
    git log -2  // -2 代表最后 2 条记录

- rebase 需要修改的commit
    git rebase -i HEAD~2
    // 或者
    git rebase -i {commitID} // 例如 git rebase -i d95ddfb
     .
     .
     .
    git rebase --continue 
    
    注:
    HEAD~2 表示最后两条 commit
    指定 commit ID 则表示对应 commit 之前的记录
    
    这里需要注意,如果你需要修改某条 commit 信息,commit ID 需要填再前一条 commit 的 ID
    执行 rebase 命令后,会出现 reabse 的编辑窗口,窗口底下会有提示怎么操作。
    这里把需要修改的 commit 最前面的 pick 改为 edit,可以一条或者多条。
    根据提示,接下来同样使用 --amend 进行修改
    
    修改完成后 需要执行 git rebase --continue 

撤回已提交的commit(未push到远程)

- 如题,commit之后发现有部分代码不想提交,忘记忽略了,现在还没有push
   // -- soft  撤回commit并保留修改的代码
   // -- hard  撤回commmit且删除所有修改过的代码 这个慎用奥

   git reset --soft HEAD^ // windows下要输入两个^^符号 否则会出现more字符

暂存(不想commit当前分支的改动而切换到其他分支)

1. 暂存操作
	git branch 				// 查看当前分支
	git stash 				// 将本地改动暂存到“栈”界面
	git checkout release	// 切换到release 分支名
2.取回暂存代码
	git checkout dev 		// 切回到dev分支
	git stash show			// 显示当前放在栈里的文件
	git stash pop			// 将刚存放在“栈”中的代码取出来

五、PUSH

强制推送到远程(慎用)

git push -f origin 

// 一般使用情景如下:
// 首先查询日志确认要回滚的节点hash值:git log
// 然后执行reset操作 回滚到指定的提交记录: git reset --hard c554e4676584
// 然后执行强制推送(加f参数),推送后,c554e4676584提交记录之后的commit将不在存在:git push -f origin 

六、其他

github操作从ssh转成https

- 执行命令
  git remote set-url origin "https://git.ziel.cn/webui/eya-ui-new"
  
- 通过如下命令查看是否更改成功
  git remote -v

配置https免输入密码

- 执行命令
  git config --global credential.helper store
- 然后你对某个仓库第一次执行push操作的时候,会要求输入用户密码,之后就再也不用了
- 通过store的方式会将你的账号密码以明文的形式存在~/.git-credentials文件里
- 大致长这样:
    cat ~/.git-credentials
    https://username:password@github.com

解决 git 命令删除远程分支后,本地 git branch -a 仍能看到已删除的分支

- 1.查看当前有哪些该消失还存在的分支(远程没有本地有[未拉取到本地])
    git remote prune --dry-run origin
- 2.删除上面展示出来的所有分支(不会删除已经拉取到本地的分支)
    git remote prune origin
- 3.验证结果,如果没有输出任何分支信息,说明已经删除完成了
    git fetch --prune origin