【git】创建仓库、克隆、拉取、上传、历史等常见操作集锦

本地工作目录、暂存区、本地仓库和远程仓库

在这里插入图片描述

  1. workspace工作区:本地项目地址
  2. index/stage暂存区:git add .将工作区内容加入到了暂存区
  3. repository本地仓库:在本地存储多个版本的文件,也称为版本库。其中有一个head指针指向最新放入仓库的文件版本,git commit -m "描述你的提交"将暂存区的内容提交到本地仓库
  4. remote远程仓库:托管代码的服务器上保存的文件,git push origin main将本地仓库的内容提交到远程仓库

在github上创建一个远程仓库

在github上选择“New repository”,填写以下信息:Repository name(仓库名称)、Description(描述)、Public or Private(公开或私有)、是否初始化仓库(创建 README 文件、添加 .gitignore 文件、选择许可证等),填写完信息后,点击绿色的 “Create repository” 按钮,就会创建你的远程仓库。

克隆一个已有远程仓库到本地+在此基础上做修改后再上传远程

  1. 可以通过点击仓库页面上的 “Code” 按钮获取仓库的 URL。
  2. 使用git并切换到你想要存储仓库的目录
  3. 如果是在已有仓库基础上进行修改,先clone远程仓库内容(无需执行git init命令),此时自动完成了本地和远程的状态同步,直接指定所需文件进行上传即可。
 git clone <远程仓库链接>  #默认 克隆master`
 git clone -b 分支名 <远程仓库链接>	#直接克隆某分支`
 git clone <版本库的网址> <本地目录名> #克隆到本地的指定目录名,可以将目录名作为git clone命令的第二个参数
  1. 直接指定所需文件进行上传即可。
git add 文件
git commit -m 'new'
git push origin main

将本地项目提交到一个新的远程仓库

  1. 在github上创建一个新的远程仓库,新的远程仓库中可能会包括.readme文件
  2. 打开git,进入本地项目目录
  3. 初始化目录 git init ,完成后会在文件夹内生成一个隐藏文件夹 /.git ,该文件记录了你在当前文件目录下所有有关git的操作。
  4. 与远程仓库建立连接,git remote add origin <仓库链接> 远程仓库链接
  5. 修改分支名以对应git branch -M main
  6. 同步本地和远程状态,比如将远程的readme文件同步到本地git pull origin main
  7. 添加当前目录下所有文件到 Git 的暂存区git add .或添加某一文件到Git 的暂存区git add xxx.py
  8. 提交到本地仓库并做标注git commit -m "描述你的提交"
  9. 提交到远程git push origin main(如果是第一次推送到远程仓库,可能会要求你提供 GitHub 账号的用户名和密码或个人访问令牌(Personal Access Token)作为身份验证)

第6步中,同步本地和远程的重要性,示例如下。
我在本地创建了.txt文件,并在github上新建了一个新仓库,将本地文件上传到github中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后在github上修改了这个文档,并commit了在这里插入图片描述> 然后在本地也修改了这个文档:
在这里插入图片描述
这时候本地再push,就会报错:
在这里插入图片描述
然后在命令行拉取github进行同步会报错:git pull origin main:main
在这里插入图片描述
修改拉取命令:git pull origin main
在这里插入图片描述
PS:当你运行 git pull origin 命令并且合并操作遇到冲突时,Git 会将你的分支状态从 (main) 变更为 (main|MERGING)。这是 Git 用于指示当前分支正在进行合并操作,但合并操作尚未完成的一种状态。在这种情况下,Git 会将冲突文件标记为冲突状态,并将分支状态更新为 (main|MERGING),以指示合并操作正在进行中。你需要手动解决冲突,并提交解决方案,然后 Git 才会将分支状态恢复为正常状态。一旦你解决了所有的冲突并完成了提交,Git 将合并操作完成,分支状态将再次变回 (main)
此时打开本地的.txt文件,可以看到:在这里插入图片描述
在本地文件上保存github的修改,删去本地的修改(<<<<<<< HEAD 到 ======= 是本地分支的更改,======= 到 >>>>>>> branch_name 是远程分支的更改,除了删除 Git 添加的冲突标记(<<<<<<<、=======、>>>>>>>)还可以增加其他额外的内容),保存文件:
在这里插入图片描述
命令行再次输入:1.git add . 2.git commit -m 'fix conflicts后再次commit’后,提交成功,并可以重新上传
在这里插入图片描述
此时,github上的内容更新为:
在这里插入图片描述

查看本地仓库状态

# 随时查看当前仓库的状态
git status
# git 命令时带上目录,比如git status ./build 只查看build目录下的代码状态
git status ./build
# 查看进程
git --all

克隆git clone

# 从远程主机克隆一个版本库,默认克隆master
 git clone <版本库的网址>
 # 直接克隆某分支
 git clone -b <分支名> <版本库的网址>
# 该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。
git clone <版本库的网址> <本地目录名>
# git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,
git clone http[s]://example.com/path/to/repo.git/
git clone ssh://example.com/path/to/repo.git/
git clone git://example.com/path/to/repo.git/
git clone /opt/git/project.git
git clone file:///opt/git/project.git
git clone ftp[s]://example.com/path/to/repo.git/
git clone rsync://example.com/path/to/repo.git/
# SSH协议还有另一种写法。
git clone [user@]example.com:path/to/repo.git/

git add.

# 添加所有的修改到 staged area
git add -A
# 添加 untracked file 和 tracked file 文件的修改到缓存区,注意会忽略掉文件的删除操作,比如你删除了文件Android.mk,执行这个命令并不会把把删除操作提交到 staged area。
git add .
# 添加 tracked file 的修改到缓存区,注意会忽略掉 untracked file,也就是新增的文件。比如编译过程中产生了很多新的中间文件,使用此命令可以忽略掉这些中间文件
git add -u

远程主机git remote

为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。
不带选项的时候,git remote命令列出所有远程主机。
使用-v选项,可以参看远程主机的网址。

# 参看远程主机的网址
git remote -v
# 克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。
git clone -o yourname
# git remote show命令加上主机名,可以查看该主机的详细信息
git remote show <主机名>
# 添加远程主机
git remote add <主机名> <网址>
# 删除远程主机
git remote rm <主机名>
# 设置远程仓库origin的新地址
git remote set-url origin <新URL>
# 给远程主机改名
git remote rename <原主机名> <新主机名>
# 将本地仓库和远程仓库连接起来
git remote add origin <远程仓库地址>

拉取git fetch

一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。

# 将某个远程主机所有分支(branch)的更新,全部取回本地
git fetch <远程主机名>
# 只取回特定分支的更新
git fetch <远程主机名> <分支名>
# 所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取。比如origin主机的master,就要用origin/master读取。
# 取回远程主机的更新以后,可以在它的基础上,使用git checkout命令创建一个新的分支。
git checkout -b newBrach origin/master
# 在本地当前分支上合并远程分支
git merge origin/master # 或 git rebase origin/master

拉取git pull

(在已经连接远程仓库后)git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。

# 取回<远程主机名>的<远程分支名>分支,与本地的<本地分支名>合并
git pull <远程主机名> <远程分支名>:<本地分支名>
# 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull <远程主机名> <远程分支名>  # 等价于先git fetch origin master  再git merge origin/master

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。

# Git也允许手动建立追踪关系,指定master分支追踪origin/next分支
git branch --set-upstream master origin/master
# 如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名
git pull origin
# 如果当前分支只有一个远程追踪分支,连远程主机名都可以省略。
git pull
# 如果合并需要采用rebase模式,可以使用–rebase选项
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

推送git push

git push命令用于将本地分支的更新,推送到远程主机。

# 将本地分支推送到远程分支
git push <远程主机名> <本地分支名>:<远程分支名>
# 如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
git push origin master
# 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
git push origin :master # 等同于 git push origin --delete master
# 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
git push origin
# 如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支
git push origin test:master    # 提交本地test分支作为远程的master分支
# 不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机
git push --all origin
# 如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项, 结果导致在远程主机产生一个”非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用–force选项。
git push --force origin

查看、重命名、切换、删除分支git branch

# 修改为main
git branch -M main 

# 查看本地分支
git branch

# 查看远程分支
git branch -r

# 查看所有分支
git branch -a



# 创建本地分支
git branch <name>
# 切换分支
git checkout <name>
# 创建本地分支并切换到分支zl_optimize
git checkout -b <name>
# 在某次取回的更新的基础上创建本地分支并切换到分支zl_optimize
git checkout -b newBrach origin/master
# 合并某分支到当前分支
git merge <name>
# 创建远程分支zl_optimize,就是把本地创建分支提交到远程仓库
git push origin zl_optimize

# 删除本地分支
git branch -d <name>
# 删除远程分支zl_optimize   
git push origin -d <name>  #  git push origin --delete <name>

git lag

# 查询打标分支
git tag
# 查看符合正则表达式的标签
git tag -l '[expression]'
# 添加带注释的标签
git tag -a <tag name> -m <comment>

查看日志git log

# 日志输出
git log
# 只显示某个用户的提交
git log -author='kiki'
# 只显示变更了的文件的名称
git log -name-only
# 查看每次提交修改的文件
git log –name-status 
# 将提交信息压缩成一行显示
git log -oneline
# 显示所有提交的依赖树
git log -graph
# 按照反序显示提交记录(最旧的提交在最前面)
git log -reverse
# 显示某个日期之后的提交
git log -after
# 显示某个日期之前的提交
git log -before
# 查看某个文件的变更日志
git log -p filename
# 查看某文件(1,1)位置的变更日志
git log -L 1,1:filename
# 查看某文件中的每一行是由谁变更的
git blame filename
# 查看尚未合并到父分支的变更日志,注意–no-merges 选项意味着只显示没有合并到任何分支的变更,master..选项意味着只显示没有合并到master分支的变更(你必须在master后面加上..)。也可以使用 git show –no-merges master.. 或者 git log -p –no-merges master.. 命令(输出结果相同)来查看一下尚未合并的文件的详细变更。
git log --no-merges master..
# 查看指定分支上的指定文件的内容
git show branchname:filename
# 查看指定分支上的指定文件和当前分支上的对应文件的差异
git show branchname filename
# 重新设置基线,这个命令会迫使git先将远程分支上的变更pull到本地,然后将尚未push的提交重新以这个最新版本作为基础添加进去
git pull --reabase
# 

查看配置GitHub用户名、邮箱、代理、远程仓库地址

# 配置邮箱和用户名
git config --global user.name "xx"
git config --global user.email "xxx"

# 查看配置信息 q退出
git config -l

# 配置代理
git config --global http.proxy http://代理地址:端口号
git config --global https.proxy http://代理地址:端口号

# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

# 查看当前url配置
git remote -v 
# 设置远程仓库origin的新地址
git remote set-url origin 新URL

可在设置中查看代理地址与端口号
在这里插入图片描述

一些撤销操作

# git commit后但没push的撤销方法
git reset HEAD^  # 代码保留,回到 git add 之前

git reset --hard Obfafd	 # 回退历史版本Obfafd,这次提交之后的变更都将被丢弃
git reset Obfafd  # 回滚历史版本Obfafd,所有这次提交之后的变更都将被移到“准备提交且未暂存”状态,这意味着你必须使用git add . 和git commit把他们添加回仓库
git reset --soft Obfafd  # 回滚历史版本Obfafd,所有这次提交之后的变更都将被移到“准备提交且已暂存”的状态,这意味着你仅仅只要执行git commit

# 远程分支回滚方法
## 本地分支版本回退
git reflog  # 找到要回退的版本的commit id:(如下面找到的Obfafd)
git reset --hard Obfafd	 # 回退历史版本Obfafd,这次提交之后的变更都将被丢弃
## 远程分支版本回退:错误提交已经推送到自己的远程分支了
git reflog  # 找到要回退的版本的commit id:(如下面找到的Obfafd)
git reset --hard Obfafd	#  回退版本
git push -f  # 强制推送到远程分支
## 公共远程分支版本回退
git revert HEAD  # 撤销最近一次提交
git revert HEAD~1 # 撤销上上次的提交,注意:数字从0开始
git revert 0ffaacc  # 撤销0ffaacc这次提交

git clean

有时,Git会提示“untracked working tree files”会“overwritten by checkout”。造成这种情况的原因有很多。不过通常来说,我们可以使用如下命令来保持工作树的整洁,从而防止这种情况的发生:

git clean -f     # remove untracked files
git clean -fd    # remove untracked files/directories
git clean -nfd   # list all files/directories that would be removed

团队内协作图解

在这里插入图片描述

跨团队协作图解

在这里插入图片描述

git命令速查表

参考链接:
https://blog.51cto.com/sxhelijian/5115308

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kiki酱。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值