git常用指令

•Workspace:工作区

•Index / Stage:暂存区

•Repository:仓库区(或本地仓库)

•Remote:远程仓库

一、新建代码库

  • git clone url ------ 下载一个项目和它的整个代码历史

二、配置

  • git config --list ------ 显示当前的Git配置
  • git config --global user.name "name" ------ 设置提交代码时的用户名
  • git config --global user.email "email address" ------ 设置提交代码时的用户邮箱

三、查看信息

  • git status ------ 查看有变更的文件
  • git log ------ 显示当前分支的版本历史,所有提交过的版本信息
  • git log --stat ------ 显示commit历史以及每次commit发生变更的文件
  • git log --p file ------ 显示指定文件相关的每次diff
  • git diff ------ 显示暂存区和工作区的差异
  • git diff file ------ 显示指定文件的差异
  • git reflog ------ 显示所有分支的所有操作记录,包括被删除的commit记录和reset的操作,可以用于回退到一些被删除的版本
  • git blame ------ 用于逐行显示文件最后修改的提交、作者和时间等信息的命令‌,常用于代码历史追溯和问题定位 例如:git blame src/drivers/driver_nl80211.c | grep use_monitor 查询use_monitor 在driver_nl80211.c中的变化情况

四、代码提交

  • git add file1 file2 ... ------ 添加指定文件到暂存区
  • git add dir ------ 添加指定目录到暂存区,包括子目录
  • git rm file1 file2 ... ------ 删除工作区文件,并且将这次删除放入暂存区
  • git commit -m message ------ 提交暂存区到仓库区
  • git commit --amend -m message ------ 使用一次新的commit,替代上一次提交,如果代码没有任何变化,则用来改写上一次commit的提交信息
  • git commit --amend file1 file2 ... ------ 重做上一次commit,并包括指定文件的新变化

五、分支

  • git branch ------ 列出所有本地分支
  • git branch -r ------ 列出所有远程分支
  • git branch branch-name ------ 新建一个分支,但依然停留在当前分支
  • git checkout -b branch ------ 新建一个分支,并切换到该分支
  • git branch branch commit ------ 新建一个分支,指向指定commit
  • git checkout branch-name ------ 切换到指定分支,并更新工作区
  • git branch --set-upstream branch remote-branch ------ 在现有分支与指定的远程分支之间建立追踪关系
  • git cherry-pick commit ------ 选择一个commit,合并进当前分支

(cherry-pick的冲突解决:

1.解决完一个补丁应用的冲突后,执行下面命令标记冲突已解决(也就是把修改内容加入缓存):git add -u //注:-u 表示把所有已track的文件的新的修改加入缓存,但不加入新的文件。

2.然后执行下面命令继续rebase:git cherry-pick --continue //有冲突继续解决,重复这这些步骤,直到cherry-pick完成。

3.如果中间遇到某个补丁不需要应用,可以用下面命令忽略:git cherry-pick --skip

4.如果想回到rebase执行之前的状态,可以执行:git cherry-pick --abort //放弃cherry-pick

注:cherry-pick之后,不需要执行commit,也不存在新的修改需要提交,都是git自动完成。直接git push即可)

  • git branch -d branch-name ------ 删除分支
  • git push origin --delete branch-name ------ 删除远程分支

六、远程同步

  • git checkout -b dev_local_xxxx remotes/origin/master ------ 以master分支创建自己的开发分支
  • git pull remote branch ------ 拉取远程仓库的变化,并与本地分支合并
  • git pull --rebase ------ 如果该开发分支也有其他合作者,采用该方式拉取最新提交
  • git rebase remotes/origin/master ------ 更新远程master主分支的提交到本地分支

rebase的冲突解决

1.解决完一个补丁应用的冲突后,执行下面命令标记冲突已解决(也就是把修改内容加入缓存):git add -u //注:-u 表示把所有已track的文件的新的修改加入缓存,但不加入新的文件。

2.然后执行下面命令继续rebase:git rebase --continue //有冲突继续解决,重复这这些步骤,直到rebase完成。

3.如果中间遇到某个补丁不需要应用,可以用下面命令忽略:git rebase --skip

4.如果想回到rebase执行之前的状态,可以执行:git rebase --abort //放弃rebase

注:rebase之后,不需要执行commit,也不存在新的修改需要提交,都是git自动完成。需要通过git push --force提交

  • git fetch remote ------ 下载远程仓库的所有变动
  • git push remote branch ------ 上传本地指定分支到远程仓库
  • git push --force remote branch ------ 强行推送当前分支到远程仓库,即使有冲突,该功能谨慎使用

七、撤销与暂存 (stash)

  • git checkout file ------ 恢复暂存区的指定文件到工作区

  • git checkout commit file ------ 恢复某个commit的指定文件到暂存区和工作区

  • git reset file ------ 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

  • git reset --hard ------ 重置暂存区与工作区,与上一次commit保持一致,谨慎使用

  • git reset --hard commit ------ 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

  • git revert commit ------ 新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支

  • git reset HEAD ------ 可以清空之前git add 的内容

  • git stash save "save message" ------ 将当前工作区的修改暂时存储到堆栈区,建议添加备注,方便查找

  • git stash list ------ 查看stash了哪些存储

  • git stash show ------ 做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}

  • git stash apply ------ 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}

  • git stash pop ------ 命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

  • git stash drop stash@{num} ------ 丢弃stash@{num}存储,从列表中删除这个存储

  • git stash clear :删除所有缓存的stash

以上stash相关,没有在git 版本控制中的文件,是不能被git stash 存起来的

  • 如果想要将远程仓库的某些最近的提交取消掉,可以通过如下步骤(该功能慎用):

1.git reset --soft commit ------将工作区的文件回退到目标版本,但不会改变暂存区的状态

2.git push --force remote branch ------ 强制将工作区推送到远程分

八、tag

  • git tag ------ 列出所有tag
  • git tag tag ------ 新建一个tag在当前commit
  • git tag tag commit ------ 新建一个tag在指定commit
  • git tag -d tag ------ 删除本地tag
  • git show tag ------ 查看tag信息
  • git push remote tag ------ 提交指定tag
  • git checkout -b branch tag ------ 新建一个分支,指向某个tag

九、其他

  • git merge与 git rebase区别

git merge:将两个分支,合并提交为一个新提交,并且新提交有2个parent。

git rebase:会取消分支中的每个提交,并把他们临时存放,然后把当前分支更新到最新的origin分支,最后再把所有提交应用到分支上。

  • 将多次提交合并成一个

1.git rebase -i HEAD~2 (HEAD~2表示近2次提交都合并)

2.然后进入编辑界面,编辑界面有提交记录以及合并命令的详细说明,将第二个pick c6da035 ~~改成squash c6da035 ~~,然后保存退出,这样git log中可以看到本地仓库近2次提交被合并成了一个

3.git push remote branch将本地仓库推送到远端仓库

相关推荐
透明的玻璃杯2 小时前
git应用
git
炸炸鱼.3 小时前
Git+Jenkins实战(一):从零搭建自动化发布与回滚系统(附完整代码)
git·jenkins
言6665 小时前
要忽略前端依赖包node_modules的文件在目录下 git暂存区消失
git
胡小禾6 小时前
Git Worktree
git
程序员小羊!6 小时前
18 GIt
git
怣疯knight6 小时前
Git 本地分支关联远程分支 常用命令汇总
git
ANNENBERG7 小时前
git分支开发管理
git
坤坤藤椒牛肉面7 小时前
GIT的使用
git
w3296362717 小时前
使用 OpenCode 在 Windows 上加速安装 Playwright 的完整指南
windows·git
我家媳妇儿萌哒哒1 天前
git:无法推送refs到远端。您可以试着运行“拉取”功能,整合您的更改。
git