git常用命令

一、git常用命令

1、初始化分支(git init
  • 在初始化分支后,需要提交内容后才能创建分支,否则会出现fatal: 不是一个有效的对象名:'master'错误
2、添加远程仓库(git remote
  • 添加远程库

    git remote add origin git@github.com:xxx/xxx.git

    • 使用token

      git remote add origin https://<token>@github.com/xxx/xxx.git

    origin为取的名字

  • 清除远程库

    git remote rm origin

3、克隆远程库(git clone
  • git clone git@github.com:xxx/xxx.git
  • git clone https://github.com:xxx/xxx.git
4、查看log(git log
  • git log:查看commit id
    • git log --graph:图形化显示分支
  • git reflog:查看所有提交过的commit id,包括删除过的
5、分支操作(git branch

提交代码前最好创建本地分支

  • 新建分支

    git checkout -b <name>(相当于以下两条命令)

    • git branch dev创建分支
      git checkout dev切换分支
  • 重命名分支

    git branch -m <oldName> <newName>

  • 查看分支

    git branch -l

    git branch 查看本地分支(git branch -r 查看远程分支,git branch -a查看所有分支)

  • 切换分支

    git checkout <name>

  • 合并分支

    • git merge <name>

      直接把两个分支再各自拉出一条线,然后连在一起

      最后会有两次提交,有分叉,会产生Merge branch xxx of xxx提交

    • git rebase

      将当前分支与要合并的分支中不同的commits取消掉,临时保存起来,然后在要合并的分支中再把保存起来的commits patch上去,变成新的commits

      最后就只剩合并后的分支,是一条直线,没有分叉,不会有Merge branch xxx of xxx提交

  • 删除分支

    git branch -d <name>

  • 建立本地分支和远程分支的关联

    git branch --set-upstream-to=origin/<远程分支> <本地分支>

6、拉取代码(fetch&pull
  • git fetch:将远程commit拉取到本地

    git fetch origin <分支名>:若不指定分支名,默认为master分支

    fetch不会直接将拉取的commit接到本地分支的最后,而是在本地最后一次push的commit处再拉取一个新的分支

  • git pull:拉取并合并分支

    用于从远程获取代码并合并本地的版本

    git pull其实就是 git fetchgit merge FETCH_HEAD的简写

  • git pull origin <远程分支名>:<本地分支名>

    • 拉取origin的远程分支与本地分支合并
  • 本地未修改,只有master分支,直接更新

    • git pull
      • 若修改后直接pull,会产生冲突
  • 本地分支有修改,多分支

    • git checkout <主分支>
      git pull
      git checkout <子分支>
      git merger <主分支>
      
7、添加暂存库(git add
  • git add:把修改的文件提交到暂存区

  • git add -A:提交所有变化

  • git add -u :提交被修改和被删除文件,不包括新文件

  • git add . :提交新文件和被修改文件,不包括被删除文件

  • git add -p使用 git add -p 整理 patch

    -p, --patch 交互地在索引和工作树之间选择补丁块并将它们添加到索引中。这让用户有机会在将修改后的内容添加到索引之前查看差异。

    这可以有效地运行 add --interactive,但是会绕过初始命令菜单,而直接跳转到 patch 子命令。有关详细信息,请参见`‘交互模式’’。

    能够交互式选择代码片段,选择需要add的代码片段

    • 输入git add -p进入patch mode,此时git会自动将改动切分成多个片段,并展示第一个片段,提示进行选择;提示语句:Stage this hunk [y, n, q, a, d, /, s, e, ?]

      含义
      `
      `
      `
      `
      `
      `
      `
      `
      `
      `
      `
      `
      `
      `
    • 挑选完后,使用git diff --cached确认,或者在提交之后git show确认改动

8、提交到本地仓库(git commit
  • git commit -m "message"

    • 使用-m 参数,可以直接在引号中输入备注
    • 不使用-m参数,会打开vim,在vim中编辑备注
  • git commit -a -m "message"

    • -a参数:把还没有执行add命令的修改一起提交
  • git commit --amend

    • 将多次提交合并为一次,追加此次提交到上一次提交的commit id中,而不会增加新的commit id

    • 如果在已提交到远程仓库的commit上追加amend,会造成远程分支与本地分支不一致,需要重新拉取合并分支后再push

      --amend一般应用于没有push到远程分支的commit

9、提交到远程仓库(git push

提交到远程分支

origin 为添加远程仓库时所取名字

  • 提交到远程分支

    • git push origin <branch name>:提交指定分支

    • git push -u origin <branch name>:将分支提交到origin,同时指定origin为默认主机

      -u:指定默认主机,后面提交时可以直接使用git push,不带origin与分支名

  • 提交到Gerrit

    git push origin HEAD:refs/for/<分支名>

  • 提交到Gerrit

    git push origin HEAD:refs/for/<branch name>

    • origin : 代表远程仓库
    • HEAD:本地当前分支
    • <分支名>: 需要push到远程的分支名
    • refs/for:代表需要经过gerrit上进行review,而不是直接提交到仓库中
  • 强制提交,覆盖远程仓库代码

    • git push --force origin <分支名>
10、回退版本(git reset
  • 取消在暂存区中的某个文件

    git reset HEAD <filename>

  • 取消暂存当前路径下所有的文件

    git reset HEAD .

  • 取消最近的n次提交或退至指定commit id

    git reset HEAD~ngit reset <commit id>

    • 同步指定的commit id的内容到当前,不包含提交。(即回退到commit id版本,但修改**不会被commit**到本地仓库)

    git reset --hard HEAD~ngit reset <commit id>

    • 同步指定的commit id的内容到当前,包含提交。(即回退到commit id版本,但修改**会被commit**到本地仓库)
11、移除(git clean
  • git clean -f <filename>:移除工作区的某个文件

  • git clean -df:移除工作区所有未追踪文件

12、撤销(git checkout
  • 撤销工作区(还未添加至暂存区)某个文件的修改

    git checkout <filename>

    git checkout .

  • 撤销添加到暂存区的文件

    使用git reset HEAD <filename>命令

  • 撤销添加至本地仓库的文件

    进行版本回退git reset HEAD~1git reset <commit id>

13、删除(git rm
  • 将文件从暂存区和工作区删除

    git rm <filename>

  • 强行从暂存区和工作区中删除修改后的文件

    git rm -f <filename>

  • 将文件从暂存区删除,但保留在工作区中(仅从跟踪清单中删除)

    git rm --cached <filename>

  • 递归删除

    git rm -r <directory>

14、查看文件差异(git diff
  • 查看修改后与原文件的不同

    git diff

  • 查看已经暂存起来的文件和上次提交的文件的差异

    git diff --cached

    git diff --staged

    • 显示的是下一次commit时会提交到HEAD的内容(不带-a情况下)
  • 查看简单的diff结果,可以加上--stat参数

    git diff --stat

  • 图像化查看不同

    git difftool

    • difftool需要配置
  • 本地分支与远程分支比较

    • 显示远程分支与本地分支差异

      git diff <remote-branch> <local-branch>

    • 仅显示远程分支与本地分支文件名差异

      git diff --name-status <remote-name> <local-name>

15、变基操作(git rebase
rebase指令作用
p, pick使用提交
r, reword使用提交,但修改提交说明
e, edit使用提交,但停止以便进行提交修补
s, squash使用提交,但和前一个版本融合
f, fixup类似于 “squash”,但丢弃提交说明日志
x, exec使用 shell 运行命令(此行剩余部分)
d, drop删除提交

【Git】rebase 用法小结

不要通过rebase对任何已经提交到公共仓库中的commit进行修改

可以对某一段线性提交历史进行编辑、删除、复制、粘贴

  • 合并多个commit为一个完整commit

    1. git rebase -i [startpoint] [endpoint]

      • -i--interactive,弹出交互式的界面让用户编辑完成合并操作

      • [startpoint] [endpoint]:指定了一个编辑区间

        若不指定[endpoint],则该区间默认终点为当前分支HEAD所指的commit

    2. pick改为ssquash

  • 将某一段commit粘贴到另一个分支上

    1. git rebase [startpoint] [endpoint] --onto [branchName]

      注:[startpoint] [endpoint]:指定的是一个前开后闭的区间,startpoint应当为要包含commit的前一个

    2. 切换到branchName

    3. branchName所指的commit_id设置为当前HEAD所指的commit_idgit reset --hard commit_id

16、保存工作区内容(git stash
  • 将工作区的修改临时保存在暂存区

    git stash

  • 将暂存区的内容恢复到工作区

    git stash pop

    git stash apply

  • 查看暂存区有哪些临时修改

    git stash list

  • 丢弃暂存区的修改

    git stash drop stash@{$num}

    git stash clear

17、标签(git tag
  • 创建标签

    git tag <tag name>

    • 标签默认打在最新的commitHEAD)上
  • 指定要创建的标签的位置

    git tag <tag name> <commit id>

  • 新建带有标签的tag

    git tag -a <tag name> -m ""

  • 获取tag列表

    git tag -l

  • 查看具体tag

    git show <tag name>

  • 删除tag

    git tag -d <tag name>

18、patchgit format-patch&git am

如何使用git 生成patch 和打入patch

  • 生成patch
    • git format-patch <commit_id>

二、git操作

1、提交当前工作区内容至指定的Commit-id

typora中需要重新打开才能看见提交的内容

  1. 保存当前工作区内容

    git stash

  2. 修改commit内容,将HEAD指针指向需要更改的commit上

    git rebase -i commit_id^

    -i--interactive,弹出交互式的界面让用户编辑完成合并操作

    找到需要更改的commit,将行首的pick改为edit

  3. 取出stash中的工作

    git stash pop

  4. 添加至暂存库

    git add <filename>

  5. 追加到指定的commit

    git commit --amed

  6. 移动HEAD指针到最新的commit

    git rebase --continue

    若有冲突:

    • 解决冲突后add,再追加
    • 再用git rebase --continue将HEAD指针移动至最新的commit处
2、git在命令行中正确显示中文文件名

在命令行输入git config --global core.quotepath off

core.quotepath设为false,不会对0x80以上的字符进行quote

3、github怎么邀请合作者加入到自己的项目

github怎么邀请合作者加入到自己的项目

登录github->选择项目->setting->Manage access->通过邮件、用户名等添加用户

被邀请人在github账号头像处查看邀请信息

4、github添加token

关于github中的token的创建方法

github用户setting ->Developer settings–>Personal access tokens–>Generate token

3、本地有修改提交到远程,但不确定是否与远程有冲突

git push有冲突提交,不产生合并记录提交

  1. 本地添加提交(add commit

  2. git fetch origin

  3. git rebase origin/<branch-name>

  4. 若有冲突:

    • 解决冲突后git add
    • ``git rebase --continue`
  5. git push

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值