前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >git命令速记

git命令速记

作者头像
yifei_
发布2022-11-14 14:20:13
4240
发布2022-11-14 14:20:13
举报
文章被收录于专栏:yifei的专栏

前言

git是一个很神奇的工具,是由Linux的发起者linus用c语言编写的… 最常用的其实只有十几个命令,其他的可以等到真正的团队合作的时候去复习一下。 在这里记录一下常用命令,想要学习git推荐廖雪峰的Git教程

状态图

git_status.jpg
git_status.jpg
git_status2.jpg
git_status2.jpg

安装git

基本操作
代码语言:javascript
复制
git #检测是否已安装git
sudo apt install git

常用(创建项目时)

代码语言:javascript
复制
第一次在新电脑创建项目,需要添加res公钥到github
cd ~/.ssh/
ssh-keygen -t rsa -C "email@email.com"  #双引号中是github的邮箱
将此目录下生成的rsa公钥复制到github

本地创建新的项目
git init
git remote add origin git@github.com:xxx/xxx.git
git pull git@github.com:xxx/xxx.git
git push -u origin master
git pull

设置用户和邮箱
git config --global user.name "YIFEI"
git config --global user.email "xxx@xx.com"

根据远程test_dev分支创建本地test_dev2分支
git fetch origin test_dev:test_dev2
该方式会在本地新建分支x,但是不会自动切换到该本地分支x,
需要git checkout test_dev2 手动切换过去。
采用此种方法建立的本地分支不会和远程分支建立映射关系。

git pull origin master #从远程master分支拉取回来,合并分支到当前分支
git push origin test_dev #push到远程test_dev分支

git fetch 相当于是从远程获取最新到本地,不会自动merge,如下指令:
git fetch orgin master //将远程仓库的master分支下载到本地当前branch中
git log -p master origin/master //比较本地的master分支和origin/master分支的差别
git merge origin/master //将origin/master合并到当前分支

ssh-keygen -t rsa -C "你的github邮箱" #生成公私钥
然后将/users/xxx/.ssh下的id_rsa.pub复制,添加到github
ssh-add #将密钥添加到ssh-agent高速缓存中
SSH -T git@github.com #测试密钥是否设置成功

git常用命令

创建版本库

代码语言:javascript
复制
mkdir mygit
cd mygit
git init
ll #可以发现多了一个.git目录

添加到暂存区

代码语言:javascript
复制
git add readme.txt
git add .  #提交新文件和修改的文件,不提交被删除的文件
git add -u  #提交修改的和被删除的文件,不提交新文件
git add -A  #提交所有的变化
ps:git 2.0中git add .改成提交所有变化了

提交到仓库

代码语言:javascript
复制
git commit -m "this is a  readme file"
-m message

查看工作状态

代码语言:javascript
复制
git status

查看修改内容

代码语言:javascript
复制
git diff

切换版本

代码语言:javascript
复制
git reset --hard commit_id
HEAD是当前版本

查看提交历史

代码语言:javascript
复制
git log
git reflog #查看命令历史,可以用于重返未来
git log --graph #查看分支合并图
git log --graph --pretty=oneline --abbrev-commit #查看详细log
终极版:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
git lg #查看效果

撤销工作区的修改

代码语言:javascript
复制
git checkout -- readme.txt
工作区的修改会被还原,还原成暂存区的内容

还原暂存区的内容(用HEAD版本的内容)

代码语言:javascript
复制
git reset HEAD readme.txt

从版本库中删除文件

代码语言:javascript
复制
git rm test.txt
git commit -m "remove test.txt"
远程库管理

关联远程库

代码语言:javascript
复制
git remote add origin git@github.com:xxxxx/xxxxx
origin是远程库的名字

将本地库推送到远程库

代码语言:javascript
复制
git push -u origin master
从本地的master推送到远程的origin
第一次clone或push可能会有ssh警告
第一次需要添加-u参数,以后可以直接
git push origin master
git push origin new_branch #推送new_branch分支到远程库

克隆远程库

代码语言:javascript
复制
cd moumulu
git clone git@github.com:xxxx/xxxx

将远程库合并到本地

代码语言:javascript
复制
git pull
如果提示no tracking information,说明本地分支与远程分支连接没有创建,使用:
git branch --set-upstream-to <branchname> origin/<branchname>

查看远程库信息

代码语言:javascript
复制
git remote
git remote -v

删除远程库文件或目录

代码语言:javascript
复制
git rm -r --cached path
git commit -m "delete remote file"
git push
分支管理

查看当前分支

代码语言:javascript
复制
git branch

创建分支

代码语言:javascript
复制
git checkout -b newbranch
-b 表示创建并切换,相当于
git branch newbranch
git checkout newbranch

根据远程分支创建本地分支

代码语言:javascript
复制
git checkout -b abc origin/abc #abc为分支名(注意这里要创建相同的名字,不然推送的时候会失败)

推送本地分支到远程

代码语言:javascript
复制
git push origin localbranch:remotebranch

修改分支名

代码语言:javascript
复制
git branch -m old_branch new_branch

切换分支

代码语言:javascript
复制
git checkout branchname

合并分支到当前分支

代码语言:javascript
复制
git checkout master #切换到master分支
git merge branchname #将branchname合并到当前分支
建议用:
git merge --no-ff -m "blabla..." branchname
这样不使用快速合并,可以在log里保留记录

删除分支

代码语言:javascript
复制
git branch -d branchname
git branch  #查看

使用rebase修改“基版本”(rebase命令会改变历史,建议只在个人分支使用)

代码语言:javascript
复制
# 当基于master版本创建新分支b1并进行了修改后,master版本已经发生了变化,此时使用rebase将b1的基版本改为master的最新版本。
git checkout b1
git rebase master
# 如果发生冲突,手动解决后需要执行 git rebase --continue

使用rebase合并多个提交

代码语言:javascript
复制
git rebase -i  [startpoint]  [endpoint]
# -i 的意思是 --interactive,即弹出交互式的界面让用户编辑完成合并操作
# startpoint 和 endpoint 指定了一个左开右闭区间,startpoint会被保留
# 如果不指定endpoint,则该区间的终点endpoint默认是当前分支HEAD所指向的提交
# 也可用该命令合并最近n个提交git rebase -i HEAD~n

# 之后弹出窗口让修改合并方式
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)

# 一般使用如下方式将后面提交都合并到第一个提交上。
pick 85697ee This is first commit.
squash ee461c1 This is second commit.
squash 326e415 This is third commit.

# 此时处在一个临时分支上,可创建新分支
git checkout -b newbranch

# 若发生冲突可解决冲突后,使用如下命令继续或终止rebase操作。
git rebase --continue  
git rebase --abort

使用cherry-pick将提交应用到其他分支

代码语言:javascript
复制
git cherry-pick hash #将某次提交应用到当前分支
git cherry-pick hasha hashb hashc #将多次提交应用到当前分支
git cherry-pick hasha..hashb #将hasha之后,直到hashb之间的提交应用到当前分支(不包含hasha)
git cherry-pick hasha^..hashb #将hasha到hashb之间的提交应用到当前分支(包含hasha)

参数
-e,--edit #打开外部编辑器,编辑提交信息。
-n,--no-commit #只更新工作区和暂存区,不产生新的提交。
-x #在提交信息的末尾追加一行(cherry picked from commit ...),方便以后查到这个提交是如何产生的。
-s,--signoff #在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。

处理冲突
# 用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行。
git cherry-pick --continue 

# 发生代码冲突后,放弃合并,回到操作前的样子。
git cherry-pick --abort 

发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。
git cherry-pick --quit
模块管理
  • 添加模块
代码语言:javascript
复制
git submodule add https://xxxxxxx/xxx.git pathname

克隆项目和submodule

代码语言:javascript
复制
git clone https://xxx/xxx.git
git submodule init
git submodule update

或用一句搞定

代码语言:javascript
复制
git clone --recursive https://xxx/xxx.git
标签管理

查看标签

代码语言:javascript
复制
git tag

添加标签

代码语言:javascript
复制
git checkout branchname
git tag <tagname>

对某次提交打标签

代码语言:javascript
复制
git tag v0.9 a3k9359
git tag -a v0.1 -m "version v0.1 released" a3k9359
-a 指定标签名
-m 添加注释

查看标签信息

代码语言:javascript
复制
git show <tagname>

删除标签

代码语言:javascript
复制
git tag -d v0.1

推送某标签到远程

代码语言:javascript
复制
git push origin v1.0

删除远程标签

代码语言:javascript
复制
git tag -d v0.2 #先删除本地标签
git push origin :refs/tags/v0.2 #删除远程标签
自定义git

忽略特殊文件

代码语言:javascript
复制
根目录下新建 .gitignore 文件,写入文件名或.exe等类型
git add -f a.exe #强制添加到git
git check-ignore -v a.exe #检查规则

配置文件

代码语言:javascript
复制
.git/config #配置文件存放地

问题记录

有时候因为本地修改的太乱了,想直接用远程库替换本地的库可以使用下面两条命令

代码语言:javascript
复制
git fetch --all #用远程库还原本地版本库
git reset --hard origin/master #用origin/master版本库内容还原暂存库

当改乱了工作区内容时,想丢弃工作区的修改 git checkout – file

当改乱了文件,并且添加到了暂存区,先git reset HEAD ,再用git checkout – file

当改乱了之后,并且提交到了本地版本库,使用git reset –hard 版本号 可以在各个版本之间穿梭

git中的check out,主要有以下两个功能:   1.创建、切换分支。   2.用暂存区或版本区的内容恢复到工作区。   具体使用方法可查看蚂蚁部落教程。

不小心提交了没用的文件到远程库

代码语言:javascript
复制
git rm -r --cached test/a.txt // 删除test文件夹下的a.txt文件,加入到删除缓存中
git commit -m '删除test文件夹下的a.txt文件' // 执行删除缓存,提交文字为“删除test文件夹下的a.txt文件”
git rm -r --cached test // 删除test文件夹,加入到删除缓存中
git commit -m '删除test文件夹' // 执行删除缓存,提交文字为“删除test文件夹”
git push // 推送操作到远程仓库

每次add之前git status查看修改了哪些文件,每次只add修改过的文件,可以防止提交了无用的文件

需要回退版本

代码语言:javascript
复制
git log 或者 git reflog
git reset --hard <commit_id> 或者 git reset --hard HEAD@{x}

只恢复某个文件

代码语言:javascript
复制
git checkout b284c80c2648f886267ea76348ca7981db8cc test/test.txt
git checkout commit filepath

暂时储藏当前的修改

代码语言:javascript
复制
有时候你改了一些文件,但此时想要切换到别的分支上工作,此时是无法切换成功的。
这时候就需要下面这条命令:
git stash #将当前修改暂时储藏起来
git stash pop 或者 git stash apply 将上次的储藏恢复
或者也可以这样:
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
$ git stash apply stash@{2}

git diff

代码语言:javascript
复制
$ git diff            #(1)
$ git diff --cached   #(2)
$ git diff HEAD       #(3)
1.工作树中的更改尚未分段进行下一次提交。
2.索引和最后一次提交之间的变化; 查看已经git add ,但没有git commit 的改动。
3.自上次提交以来工作树中的更改;如果运行“git commit -a”,查看将会提交什么。

抛弃所有改变,同步到最新远程库

代码语言:javascript
复制
git强制覆盖本地代码:
git fetch --all
git reset --hard origin/master
git pull

或(慎用)
git fetch --all && git reset --hard origin/master && git pull

参考

欢迎与我分享你的看法。 转载请注明出处:http://taowusheng.cn/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 状态图
  • 安装git
    • 基本操作
    • 常用(创建项目时)
    • git常用命令
      • 远程库管理
        • 分支管理
          • 模块管理
            • 标签管理
              • 自定义git
              • 问题记录
              • 参考
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档