git常用操作记录

315 阅读7分钟

1、git本地仓库的初始化

git init

2、本地git的用户信息配置和操作

查看和修改本地用户信息

//查看本地用户名
git config user.name
//查看邮箱地址
git config user.email
//修改用户名,xxx 处填写你的用户名
git config --global user.name "xxx"
//修改邮箱地址,xxx 处填写你的邮箱地址
git config --global user.email "xxx"

修改指定项目的用户名和邮箱地址

如果你希望在一个特定的项目中使用不同的用户名和邮箱地址来提交,可以使用下面的方法单独设置 用户名和邮箱地址,如果不设置就会默认使用上面全局设置的用户名和邮箱地址 。

打开终端 cd 到指定项目的仓库下,分别输入以下命令即可单独修改用户名和邮箱地址 。

//修改用户名,xxx 处填写你的用户名
git config  user.name "xxx"
//修改邮箱地址,xxx 处填写你的邮箱地址
git config user.email "xxx"
//其实就是去掉了--global,就变成了当前cd到的目录下的git局部配置

这个 用户名 和 邮箱地址 只是用来记录本地 Git 提交信息的一个标识,和你远程仓库账号下的 用户名 或 邮箱地址 没有任何关系。

3、添加和本地提交

git add 跟踪一个文件,将其提交至暂存区。

//添加指定的文件到暂存区
git add 文件名
//添加当前操作目录下的所有文件
git add .

在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤

git commit -a -m 'added new benchmarks'

git commit --amend这个命令会将暂存区中的文件提交。

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

最终你只会有一个提交——第二次提交将代替第一次提交的结果。

查看git管理的文件列表和状态

//查看文件列表
git ls-files
//检查当前文件状态
git status
//使用 git status -s 命令或 git status --short 命令,得到一种格式更为紧凑的输出。
git status -s 

查看提交历史

不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面。 git log可以直接查看所有的提交log


$ git log
commit 4e398c5ca5a08ffc5a7f9f6ec432b7fa54e860d4 (HEAD -> master)
Author: bruceyang <18328434957@163.com>
Date:   Sat Jul 11 09:48:41 2020 +0800
    新建git测试文件

log常用的选项 -p 或 --patch它会显示每次提交所引入的差异(按 补丁 的格式输出)。

git log -p -2

这个选项可以使用不同于默认格式的方式展示提交历史。 比如 oneline 会将每个提交放在一行显示,在浏览大量的提交时非常有用。 另外还有 short,full 和 fuller 选项

git log --pretty=oneline

git log --pretty=format 常用的选项

查看已暂存和未暂存的修改

查看尚未暂存的文件更新了哪些部分

git diff

查看已暂存的将要添加到下次提交里的内容,可以用 git diff --staged 命令。 这条命令将比对已暂存文件与最后一次提交的文件差异:

git reflog 非常重要的一个命令

git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

移动/重命名git管理下的文件

$ git mv file_from file_to

这个命令和Linux命令基本上是一致的,但是他只能mv在git管理下的文件。

4、分支

新建分支

//新建分支
$ git branch branchName

//从某一次提交开始新建分支
$ git branch branchName commmitId

//切换分支
$ git checkout branchName

一般是使用

git checkout -b branchName

这就是上面两条命令的合并,新建并且切换到新的分支。

git checkout -b branchName commmitId

查看分支

//查看当前使用分支
$ git branch
* master
//查看所有分支
$ git branch -a
* master
  remotes/origin/master

//查看远程分支
$ git branch -r
  origin/master

远程分支

//添加远程仓库地址
git remote add origin https://xxx.git

//推送本地分支master的代码到远程分支
git push -u origin master

//推送本地test分支到远程仓库,分支名称也叫test
git push origin test:test

加了参数-u后,以后即可直接用git push 代替git push origin master

删除分支

//新建
$ git branch test
//删除分支
$ git branch -D test
Deleted branch test (was ced74e2).

//再查看就没有test分支了
$ git branch
* master

远程分支删除

$ git branch -r
  origin/master

$ git branch -r -d origin/master
Deleted remote-tracking branch origin/master (was ced74e2).

再看远程分支就没了

分支合并

  • git merge 需要被合并的分支名称
 

推送本地分支到远程分支

//推送本地分支test到远程分支,分支命名为test1
git push --set-upstream origin test:test1

分支重命名

git branch -m oldName  newName

远程分支改名

#1 将本地分支进行改名
git branch -m old_branch new_branch
 
#2 将远程分支的老分支删除
git push origin :old_branch
 
#3 将改名后的分支push到远程
git push origin new_branch

Git新建本地分支与远程分支关联

//语法如下
git branch --set-upstream branchName origin/branchName

//设置本地debug分支和远程的debug分支进行关联
git branch --set-upstream debug origin/debug

5、撤消

git commit之前

//将add过后的文件从暂存区弹出,恢复到未add的状态
git reset HEAD <file>

未添加到暂存区的撤销(没有git add)

可以通过 git checkout -- filename来撤销修改

//放弃工作目录中的更改 
use "git checkout -- <file>..." to discard changes in working directory

如果想将多个文件一次性撤销可以用

git checkout -- .

添加到暂存区的撤销

git reset HEAD fileName

//一次性撤销所有的,不指定文件名
git reset HEAD

git commit之后

如果当commit提交后想撤销的话,这就需要revert命令。git revert 命令是撤销某次操作,而在此次操作之前和之后的提交记录都会保留。

//撤销这次commit的操作,相当于这次commit消失了
git  revert commitId

6、回滚

回退(reset)。

如果想回到之前某个版本,可以用reset命令,可以回退到某次提交,那该提交之后的提交都会回滚,不过这种覆盖是不可逆的,之前的提交记录都没有了。所以平时开发中尽量注意,避免使用reset。

原理: git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所示,假设我们要回退到版本一:

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

已提交未push

  • --hard – 强制将缓存区和工作目录都同步到你指定的提交
git  reset --hard  commit_id

使用git reflog可查看已经回滚了的commmit。

已提交已push

git revert [版本号]

反做(revert)

git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。 如下图所示:

适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。

7、变基

8、其他操作

git stash

stash命令可用于临时保存和回复修改,可跨分支。

  • 注:在未add之前才能执行stash!!!!
git stash [save message]
保存,save为可选项,message为本次保存的注释
git stash list
所有保存的记录列表
git stash pop stash@{num}
恢复,num是可选项,通过git stash list可查看具体值。只能恢复一次
git stash apply stash@{num}
恢复,num是可选项,通过git stash list可查看具体值。可回复多次
git stash drop stash@{num}
删除某个保存,num是可选项,通过git stash list可查看具体值
git stash clear
删除所有保存

git cherry-pick

能够把另一个分支的一个或多个提交复制到当前分支

首先git checkout 到另一个分支,然后使用git log找到想要复制的commit 的id,记录下来,切换到自己分支,使用git cherry-pick [上面记录的commit id] 回车即可!

如果想要复制多个, 使用git cherry-pick (commitid1..commitid100],commitid1为想复制的最老提交(不包括),commitid100为想复制的最新提交(包括)

如果想要包括commitid1,那么在commitid1后加^即可,即 git cherry-pick [commitid1^..commitid100]!

git fsck

git fsck --lost-found  

www.jianshu.com/p/918f950fb…