foxlele2014 / boring

boring
0 stars 0 forks source link

git命令 #10

Open foxlele2014 opened 7 years ago

foxlele2014 commented 7 years ago

因为装sourcetree有点麻烦 = =。。。。所以还是直接用git的命令吧= =。 所以记录下(只知道git clone = =。。。

foxlele2014 commented 7 years ago

http://blog.163.com/fenglang_2006/blog/static/13366231820111171542658/  查看本地分支(当前):git branch

foxlele2014 commented 7 years ago

git status查看当前分支状态(工作区、暂存区)

foxlele2014 commented 7 years ago

git add <file>加入暂存区( git add . )全部

foxlele2014 commented 7 years ago

git commit 将暂存区的文件提交,(会要求写comment)

每次这里写评论了之后(因为用的是中文输入),然后按esc, :wq 就会砰砰砰的电脑在响,没啥效果。。。这里切换回英文输入法就好了。。

foxlele2014 commented 7 years ago

git push将提交进行push到远程

这里有点疑问?? 我是直接git push,没有指定任何分支push,按道理是只会push到当前所在的分支。

指定了push的远程分支就不会有这样子的报错了。。

如:git push origin feature/test

但是它提示了: Counting objects: 11, done. Delta compression using up to 4 threads. Compressing objects: 100% (11/11), done. Writing objects: 100% (11/11), 1.73 KiB | 0 bytes/s, done. Total 11 (delta 5), reused 0 (delta 0) To https://这里打码.git 158433d..7969c23 feature/correspondence_relative -> feature/correspondence_relative ! [rejected] develop -> develop (non-fast-forward) ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://这里打码.git' hint: Updates were rejected because a pushed branch tip is behind its remote hint: counterpart. Check out this branch and integrate the remote changes hint: (e.g. 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

他有被push到develop,和master,

按照git管理分支,a pushed branch tip is behind its remote,

foxlele2014 commented 7 years ago

有隐藏的文件夹.git
非git项目可以进行git init进行初始化。

foxlele2014 commented 7 years ago

例如:git add aaa.js -->modify aaa.js -->git commit 这个过程,中间的修改不会被提交到暂存区,中间还需要再进行一次git add aaa.js

foxlele2014 commented 7 years ago

git checkout -- file 丢弃 git checkout -- readme.txt

需要加上-- 否则就是另外一个意思了(切换分支)

foxlele2014 commented 7 years ago

创建分支 git checkout -b test 等同于git branch test git checkout test image

foxlele2014 commented 7 years ago

推送分支git push --set-upstream origin test 基于某分支建立分支(是不是就得先git checkout到当前这个分支,然后基于这个分支建立新的分支。

foxlele2014 commented 7 years ago

git merge <name> 合并分支到当前分支 git branch -d <name>
删除分支 git push origin --delete <name> 删除远程分支

foxlele2014 commented 7 years ago

git log --graph 查看commit log

更简约的: git shortlog -sn

具体参数介绍

foxlele2014 commented 7 years ago

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000

foxlele2014 commented 7 years ago

拉取远程分支到本地

首先查看远程分支:git branch -r

然后:git checkout -b 本地分支名 origin/远程分支名 (检出并切换到该分支)

foxlele2014 commented 7 years ago

将功能分支合并到develop里, git checkout develop切换到develop git merge feature/xxx

提示出现conflicts 然后我直接将这些conflicts push到develop了。

foxlele2014 commented 7 years ago

获取远程分支,更新本地的远程分支(抓取)

git fetch origin

原理

foxlele2014 commented 7 years ago

感觉还是很有必要需要学习下git的管理分支的原理,使用指针的思想。

foxlele2014 commented 7 years ago

git status查看当前被修改的文件, 但是只能看到文件名,

当需要看到文件内容具体的修改, 则可以git diff(不加参数,则查看当前所有被修改的文件的修改内容) 可以通过git diff <文件名>查看该文件内容被修改的地方。

foxlele2014 commented 7 years ago

如何查看已经提交了的文件的修改内容?

查看git log

找到对应的commit id

然后git show commit-id

foxlele2014 commented 7 years ago

删除本地分支和删除远程分支: git branch -d xxx git push origin --delete xxx

foxlele2014 commented 7 years ago

git show commit-id 查看历史修改记录

foxlele2014 commented 7 years ago

oh shit git!

foxlele2014 commented 7 years ago

储藏: git stash

查看现有的储藏: git stash list

应用储藏:(默认应用最新的) git stash apply

可以指定名字: git stash apply stash@{1} image

这个暂存是放在本地,所以是能查看到不同分支的暂存的,所以应用的时候需要注意分支。

foxlele2014 commented 7 years ago

image 设置了git config之后还这样, 结果是因为使用了git bash

image

foxlele2014 commented 7 years ago

用git 生成了ssh key的就会有这两个文件

image

服务器上的 Git - 生成 SSH 公钥


重新生成ssh-key,覆盖了之前的文件内容,也就是说现在存的是我的账号了。

但是使用git push 的时候还是提示是另一个的账号= =。也就是说我这个push是使用了别人的账号来提交到我的repository里了。因为我的账号里边没有保存对方的ssh-key的信息,所以被deny了。

那么,这个账号是从哪里来的呢?

首先确定了git config user.name是我自己的, git config user.email也是我的。

机器的ssh-key文件也是我账号的信息。

foxlele2014 commented 7 years ago

删除了这两个文件居然都没效 = =。

foxlele2014 commented 7 years ago

然后,有个问题是,我上次删了那两个ssh之后,我今天被迫重启了机器,然后我的gitlab都需要每次输入密码了。 因为我的转接口坏了。哎。不能用网线来连了,然后连了wifi,居然可以连内网,之前都不可以的,太特么神奇的,不过我估计和这个没关系吧

image

然后用这个方法暂时解决了要输入密码的困扰= =。


又很尴尬的事情出现了,又用回了之前的ssh配置= =。好烦啊。。。

foxlele2014 commented 7 years ago

果然是和重启有关系啊,可能是缓存区还有文件记录。。。。。

那么现在我要怎么样可以不用每次输入密码呢,我又不想设置ssh,避免以后的人用这台机器又得弄一遍。

foxlele2014 commented 7 years ago

似乎这个不需要弄什么,它会一直使用这个账号和密码

foxlele2014 commented 6 years ago

image 第一次使用git reset命令,因为之前提交不小心删掉了某个文件。然后reset了一下,但是提交到时候提示冲突了。

刚又重新试了一次,这个回退只是回退本地版本,让指针指到自己想要到某个commit id里。但是远程到依旧还是最新到。

所以我想知道我要怎么做才可以让远程到也回退到我指定到版本。

不想再次修改这些文件到时候提示冲突。这样又得处理。还是本来就是这么设计到呢?


那sourcetree的回退是怎么做到的呢

foxlele2014 commented 6 years ago

image 答案是不能。

foxlele2014 commented 6 years ago

是存在两个不同的命令,一个是reset,另一个是revert

一个应该是修改本地的,一个是不仅修改了本地,还操作了服务器里的。

关于代码回滚

foxlele2014 commented 6 years ago

在本地git init的项目,假如需要推送信息到远程,需要在远程简历对应的仓库,之后将本地的仓库和远程的关联起来,之后就可以在本地push 各类修改要远程了

git init

foxlele2014 commented 6 years ago

疑问: 当使用git clone的时候,默认是读取机器里哪个信息去拉取文件的,之后git push的时候又是去读取哪里的信息,

foxlele2014 commented 6 years ago

靠。。。好坑爹

image

比较疑惑的就是上次删除了ssh-key文件之后,重启了,然后居然就不会使用这里边的账号密码了?? 原因是因为我里边新建了一个.git-credentials文件吗?

github账号切换以及https和SSH上传方式对比

foxlele2014 commented 6 years ago

有个很神奇的事情 :给visual studio code 装了prettier,用来格式化代码,然后也在usersetting里配置了想要的格式化配置。一开始是可以用的。但是后来不知道为啥突然就不好使了,用不了。。。 然后今天打开来,继续检查了对应的配置,也没有做对应的修改,只是点击了下workspace setting这个tab,然后就生成了setting.json文件。在.vscode/目录下。。。 超级神奇, 然后格式化的事也好了。。。 那么问题来了。因为这个文件是untrack的。所以肯定每次使用git status肯定能看到。这样就不能愉快的使用git add .了。查了下,可以在.git/info/exclude文件里增加这个.vscode/

这里突然想起一件很搞笑的事。 之前是使用sourcetree来使用git,某天突然有个特殊需求,就是需要合并两个版本的代码。这里的两个版本是指功能差不多,但是一个是阉割版本。另一个不是,然后现在的需求是想合并这两份代码。当然除了是阉割版本之外,也在相同的部分里做了一部分修改。所以加入单纯合并代码肯定不行,而且功能也不算少,一个一个检查过去,再控制显示隐藏就很麻烦。

这时就有一个方法,就是保留两份代码,但是是不同目录。通过配置文件的某个值来区分读取哪个文件的代码。 ----这里才是神奇的开始----- = =。本人可能某个不知道什么分支里,做了某些操作,因为在切换分支的时候是覆盖目录的,因为两个版本都是在同一个git里,所以切换分支的时候,阉割版本里的某些功能没有,就会有其他的代码,我可能觉得很烦,就把这些都忽略了。这里是用可视化工具忽略,可能这个忽略就是写入到.git/info/exclude里去了= =。

结果迁移的时候找了很久,我本地是存在的。但是远程里是没有的。很尴尬。。。和另外一个同事研究了半天才发现。

image

Git忽略文件

foxlele2014 commented 6 years ago

commit-log

查找历史提交记录,指定各类filter

git log --pretty="%h - %s" --before="2015-12-01"

foxlele2014 commented 6 years ago

git 切域

foxlele2014 commented 6 years ago

从一个仓库提交代码到另外一个仓库

这种做法是在另外一个仓库新建了一个分支,不过我想要的是不是新建分支,而是提交到现有的分支里。 push的时候应该可以设定推送到哪个分支吧。

现在我应该可以做git merge的操作就ok了。也达到了一样的效果。

foxlele2014 commented 6 years ago

git revert <commit-id>回退,并且需要push。

resert/checkout/revert

foxlele2014 commented 5 years ago

git 默认对文件名的大小写不敏感。

这时可以对git进行配置。

git config core.ignorecase false