x1184的小站
x1184的小站
Git(二)-单个命令详细用法汇总
Git(二)-单个命令详细用法汇总

基本概念

查看完全关系
git branch -vv
获得服务器上最新的关系
git fetch --all
git branch -vv
推送到远程版本
git push origin -d branchName

origin 远程服务器
origin/master 远程分支
master 本地分支
HEAD 当前版本的意思
说简单一点,HEAD就是当前活跃分支的游标。

HEAD指向master,而master指向的是最近的一次提交
HEAD是当下的分支,当切换分支时 HEAD指向新的。
如果指向一个没有名字的分支,叫做detached HEAD。
小写的head应该是指commit对象引用,每个head有独立名字
具体来说 每个master默认一个head然后可以不断再加
和commit应该是对应的,只要他是current head 那其实就是HEAD

写法上来说,基本可以看到git pull和git push 是喜欢 origin xxx:xxx 或 origin xxx 这样,而git checkou git branch 喜欢 origin/xxx 这样。

本地、远程和追踪分支

git branch

删除本地分支

git branch –xx dev

-d是–delete的缩写,在使用–delete删除分支时,该分支必须完全和它的上游分支merge完成,如果没有上游分支,必须要和HEAD完全merge
-D是–delete –force的缩写,这样写可以在不检查merge状态的情况下删除分支
–force简写-f,作用是将当前branch重置到初始点(startpoint).如果不使用–force的话,git分支无法修改一个已经存在的分支.

删除远程分支和追踪分支(关系)

git push origin –delete remotebranch

该指令也会删除追踪分支(关系)

删除追踪分支

注意git branch -a里看不到 但是其实还在 要你重新设定上游分支
git branch -d –remotes 可以删除追踪分支(关系)
该操作并没有真正删除远程分支,而是删除的本地分支和远程分支的关联关系,即追踪分支(关系)

设定新的上游分支

git branch -u origin/cccc

创造一个新的远程分支

git push origin localbranch:remotebranch

除了这个是服务器 本地端 远程端 其他基本都是 服务器 远程端:本地端

总之,像操作服务器上版本 还是得用git push origin 这个开头 然后貌似 最后的参数都是remotebranch

重命名本地

git branch -m #modify# oldname newname

说下git branch git push 时 带-u 和不带 -u 区别
带u参数表示 并设置后面的服务器版本为上游分支
不带 则不会设置

例如git merge dev
这时候master指向了Dev的最近一次提交。而head指向当前分支即master
这时候可以删除掉Dev
使用 git branch -d dev

origin/master 远程分支 上游分支 upstream branch -> master本地分支 被追踪分支 tracking branch

git checkout

git checkout

git checkout [branch]

如果checkout的分支本地不存在,但是和远程分支名一样,git会自动创建追踪分支,并且切换到该分支

创建并设定上游分支(如果上游分支还没有那先创建个上游)
git checkout -b aaa origin/bbb这样本地aaa为远程bbb的追踪分支.
这个是最推荐的 如果用其他方式要记住先确定本地branch干净在制定追踪

设定上游分支
git checkout –track origin/dev
分支被设定为追踪 服务器为origin上的远程分支dev 并切换到dev分支上

git clone

1.自动将远程服务器命名为origin
2.下载该服务下的所有数据
3.创建一个指向master分支的指针,并将该分支命名为origin/master
4.创建名为master的本地分支,并且和远程分支在同一个提交节点

设定服务器名称
git clone -o (origin) cat
则repo最终为 cat/master

git merge

如果在master分支上,可以通过git merge @{u}等指令来代替git merge origin/master

git merge master Guo

git merge Guo

git diff Guo

git fetch

FETCH_HEAD 本地的文件,是版本链接,指向远程库取下的分支的末端版本
commit-id 唯一标识一个版本的序列号 commit时先在本地 push时同步到远程库

git fetch 更新服务器中远程库的最新commit-id 记录到本地.git/FETCH_HEAD文件中。git fetch origin –prune或它的简写git fetch origin -p来单独删除追踪分支(关系)。
完整流
git fetch origin master:tmp
git diff tmp
git merge tmp
git branch -d tmp
git fetch origin
默认拉到master
git fetch origin dev
拉远程的fetch-head 拉远程dev的提交

git pull

git pull [远程主机名] [远程分支名]:[本地分支名]

git pull 时git会自动知道需要获取和merge的分支的服务器.

有选择合并git fetch 直接快捷合并git pull

git push

git push origin HEAD:guo #貌似这个刚刚新建时要制定HEAD
git push origin guo #貌似这个 只要云端和本地不同名就不醒??? 同名的测试了这种写法都没问题
git push #缩写 自动传到同名

用列表的形式汇总下

  • commit提交和push是两个东西 本地没网也可以一直commit 但是push上才算是记录在云端了 能被别的协作者看到
  • 追踪和 未追踪是两个概念 未追踪是无法commit的 追踪的文件才有commit资格
    对于未追踪文件 通过git add 转换为追踪文件
  • pull 是相当于 fetch+merge+diff 然后本地push只是push 很多时候会和云冲突 保有先pull再push的习惯
  • 从三个用于撤销的命令来对比
    checkout 针对未commit的修改 撤回
    revert 针对已commit的修改直接再用commit去撤回
    reset 直接就把已有commit记录给抹去了 而上面两个是动不了已有的commit记录的
  • git push origin HEAD:guo 如果本地branch名和云端不一样 只能这样push,,很麻烦呐

疑难问题汇总

用户A
commit 1
pull
服务器有行
commit 2
服务器有行

用户B 早上pull 发现文件里少行 -》 服务里是少行的版本

产生矛盾,,解释不了这一点

恼人的gitignore不生效

赞赏
欢迎留言交流讨论,留言必回。

admin

文章作者

一个平凡的追梦人

发表评论

textsms
account_circle
email

x1184的小站

Git(二)-单个命令详细用法汇总
git各个命令的详细用法,适合想理解git操作更透彻的同学
扫描二维码继续阅读
2020-10-02