git简单而实用,使用时间长了,越来越喜欢它,简直是开发利器。现在记录一些实用操作,以供大家参考。

1. 初始配置

绑定Git的用户名及邮箱,并写入到配置文件~/.gitconfig中。

git config --global user.name "yourname" 
git config --global user.email "yourname@163.com"

生成ssh文件

 ssh-keygen -t rsa -C "yourname@163.com"

然后一路回车即可。id_rsa是私钥,id_rsa.pub是公钥,windows和Linux都在用户的.ssh文件夹下,拿Linux举例,它的配置文件在~/.ssh/id_rsa.pub中。

2. 合并多个commit

  • 操作步骤
git log # 查看commit记录
git rebase -i hash_num # hash_num为不需要合并的hash号
# 然后会弹窗,修改为合并选项,如下
把pick改为squash或者s,并:wq保存
# 继续弹窗,编辑commit内容,可以和原来不一样,也可以将不需要的注释掉
  • 最后查看commit记录
git log #只是为了检查
  • 说明
  1. rebase参数说明:
git rebase -i [startpoint] [endpoint]
  • -i 的含义是:–interactive, 即弹出交互式的界面让用户编辑完成合并操作
  • [startpoint] :合并区间的起点。默认是当前分支 HEAD 所指向的 commit。
  • [endpoint] :合并区间的终点,endpoint为不需要包含的commit的hash
  1. 参数选项说明:
p, pick: 保留该 commit。
r, reword: 保留该 commit,可以修改 commit 的注释。
e, eidt: 保留该 commit,但停下来修改该 commit (不仅仅是注释),可以用来解决 merge 冲突。
s, squash: 将该 commit 和 前面一个 commit 合并。
f, fixup: 将该 commit 和 前面一个 commit 合并,但不保留该提交的注释信息。
x, exec: 执行 shell 命令。
d, drop: 丢弃该 commit。

3. 修改旧的commit消息

同样也是使用rebase -i操作,不同的是,需要将pick改为reward或者r,然后将原消息修改为自己需要的commit新消息

4. 修改本地和远程分支名字

  1. 修改本地分支名字
  • 修改非当前分支的名字
git branch -m "原分支名" "新分支名"
  • 修改当前分支的名字
git branch -m "新分支名称"
  1. 修改远程分支的名字
git push origin --delete "原分支名" #先删除远程分支
git branch -m "原分支名" "新分支名" #修改本地分支名字
git push origin "新分支名"  #推送至远程分支

5. 删除本地和远程分支

  • 删除本地分支
 git branch -d local_Branch_name # 方法1:
 git branch -D local_Branch_name #方法2:-D等效于--delete --force命令的标志代替-d
  • 删除远程分支
git push origin --delete remote_Branch_name
git push -d origin remote_Branch_name

6. 找回丢失的commit(reflog)

有时候使用git reset --hard之后,就看不到最新的一些commit,如果想要回退到之前的commit,可以使用下列命令来查看历史hash,然后使用reset操作找回之前的commit。

查看历史操作命令,下列2个都可以:

git reflog
git reflog show

7. 合并分支操作(rebase)

假设现在有两个分支,一个master分支,另一个dev分支,现在要把dev分支的内容合并到master分支上去。

  • 切换至dev分支
git branch dev
  • rebase合并
git rebase master
  • 如果有冲突,执行下列操作,如果没有则跳过

打开vscode,解决冲突,然后执行continue操作,直到没有冲突

git rebase --continue

提示没有冲突后,添加修改至现在的分支

git add . #添加所有修改

注意这里不需要提交commit操作

  • 提交远程
git push origin master

#如果提示有问题,且自己确认代码无误,可以强制提交
git push origin master -f

8. git pull 与git pull --rebase

git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase

所以尽量使用git pull --rebase

9. 本地看不到远程的分支

使用git branch -a 或者git branch -r 看不到别人更新的分支,查看方法有以下两种。

  • 方法一
git remote update origin --prune
git branch -r #查看远程分支
  • 方法二
git fetch
git branch -r #查看远程分支

10. 将远程分支拉取至本地,并切换至分支

git fetch
git checkout -b dev origin/dev

11. 清除本地中,远程已经删除的分支

git remote prune origin

12 保存暂时的修改,以后再恢复(stash)

能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录。

git stash是将本地当前未提交的内容暂存起来,并且将修改的文件还原到修改之前的状态,用于后续恢复当前的工作,不会被git push到远程分支。

git stash

如果保存多个stash,则会依次保存为0,1,2.(最后一次的为0),而自己很难对它们进行区分,为了方便可以加上"注释"(不用双引号)。

git stash save "注释”

查看当前stash中的内容

git stash list

使用git stash pop来恢复之前暂存的内容。

git stash pop

将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除,也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多个分支的情况。

git stash apply

清除堆栈中的所有内容

git stash clear

从最新的stash创建分支。可以用于解决stash中的内容和当前目录的内容发生冲突的情景。

git stash branch

13. cherry-pick合并单个或多个commit

可以选择其它分支的单个或多个commit合并到自己分支下。

git cherry-pick commitid   # 单个commit

git cherry-pick commitid1..commitid100  # 多个commit,不包含commitid1

14. 撤销git add的操作

因为git add .的命令我们经常使用,他是把文件模块暂时缓存到本地。

git reset . #撤销全部add
git reset 文件   #撤销某个文件

15. 对比git diff

  • 未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat

16. git log的其他用途

  • 只查询某个作者的提交
git log --author=qlee

查询所有commit,并以作者的形式进行归类

git shortlog

控制是否显示merge信息

--merges或者--no-merge

控制时间

--after和--before

17. 查看某次commit的修改

git show commitID

18. 断开与建立远程连接(git remote add/remove/rm)

  • 断开远程连接
git remote remove origin
git remote rm origin
  • 建立远程连接
git remote add origin git@github.com:youname/xxx.git

19. 调整git log的顺序

使用git rebase -i 操作,然后不改变pick的状态,直接调整顺序,保存退出即可。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐