Open foxlele2014 opened 7 years ago
http://blog.163.com/fenglang_2006/blog/static/13366231820111171542658/
查看本地分支(当前):git branch
git status
查看当前分支状态(工作区、暂存区)
git add <file>
加入暂存区( git add .
)全部
git commit
将暂存区的文件提交,(会要求写comment)
每次这里写评论了之后(因为用的是中文输入),然后按esc, :wq 就会砰砰砰的电脑在响,没啥效果。。。这里切换回英文输入法就好了。。
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,
有隐藏的文件夹.git
非git项目可以进行git init
进行初始化。
例如:git add aaa.js -->modify aaa.js -->git commit 这个过程,中间的修改不会被提交到暂存区,中间还需要再进行一次git add aaa.js
git checkout -- file
丢弃
git checkout -- readme.txt
需要加上-- 否则就是另外一个意思了(切换分支)
创建分支 git checkout -b test
等同于git branch test
git checkout test
推送分支git push --set-upstream origin test
基于某分支建立分支(是不是就得先git checkout
到当前这个分支,然后基于这个分支建立新的分支。
git merge <name>
合并分支到当前分支
git branch -d <name>
删除分支
git push origin --delete <name>
删除远程分支
拉取远程分支到本地
首先查看远程分支:git branch -r
然后:git checkout -b 本地分支名 origin/远程分支名
(检出并切换到该分支)
将功能分支合并到develop里,
git checkout develop
切换到develop
git merge feature/xxx
提示出现conflicts 然后我直接将这些conflicts push到develop了。
感觉还是很有必要需要学习下git的管理分支的原理,使用指针的思想。
git status
查看当前被修改的文件,
但是只能看到文件名,
当需要看到文件内容具体的修改,
则可以git diff
(不加参数,则查看当前所有被修改的文件的修改内容)
可以通过git diff
<文件名>查看该文件内容被修改的地方。
如何查看已经提交了的文件的修改内容?
查看git log
找到对应的commit id
然后git show commit-id
删除本地分支和删除远程分支:
git branch -d xxx
git push origin --delete xxx
git show commit-id
查看历史修改记录
储藏:
git stash
查看现有的储藏:
git stash list
应用储藏:(默认应用最新的)
git stash apply
可以指定名字:
git stash apply stash@{1}
这个暂存是放在本地,所以是能查看到不同分支的暂存的,所以应用的时候需要注意分支。
用git 生成了ssh key的就会有这两个文件
重新生成ssh-key,覆盖了之前的文件内容,也就是说现在存的是我的账号了。
但是使用git push
的时候还是提示是另一个的账号= =。也就是说我这个push
是使用了别人的账号来提交到我的repository里了。因为我的账号里边没有保存对方的ssh-key的信息,所以被deny了。
那么,这个账号是从哪里来的呢?
首先确定了git config user.name是我自己的, git config user.email也是我的。
机器的ssh-key文件也是我账号的信息。
删除了这两个文件居然都没效 = =。
然后,有个问题是,我上次删了那两个ssh之后,我今天被迫重启了机器,然后我的gitlab都需要每次输入密码了。 因为我的转接口坏了。哎。不能用网线来连了,然后连了wifi,居然可以连内网,之前都不可以的,太特么神奇的,不过我估计和这个没关系吧
然后用这个方法暂时解决了要输入密码的困扰= =。
又很尴尬的事情出现了,又用回了之前的ssh配置= =。好烦啊。。。
果然是和重启有关系啊,可能是缓存区还有文件记录。。。。。
那么现在我要怎么样可以不用每次输入密码呢,我又不想设置ssh,避免以后的人用这台机器又得弄一遍。
似乎这个不需要弄什么,它会一直使用这个账号和密码
第一次使用git reset
命令,因为之前提交不小心删掉了某个文件。然后reset了一下,但是提交到时候提示冲突了。
刚又重新试了一次,这个回退只是回退本地版本,让指针指到自己想要到某个commit id里。但是远程到依旧还是最新到。
所以我想知道我要怎么做才可以让远程到也回退到我指定到版本。
不想再次修改这些文件到时候提示冲突。这样又得处理。还是本来就是这么设计到呢?
那sourcetree的回退是怎么做到的呢
答案是不能。
在本地git init的项目,假如需要推送信息到远程,需要在远程简历对应的仓库,之后将本地的仓库和远程的关联起来,之后就可以在本地push 各类修改要远程了
疑问:
当使用git clone
的时候,默认是读取机器里哪个信息去拉取文件的,之后git push
的时候又是去读取哪里的信息,
靠。。。好坑爹
比较疑惑的就是上次删除了ssh-key文件之后,重启了,然后居然就不会使用这里边的账号密码了?? 原因是因为我里边新建了一个.git-credentials文件吗?
有个很神奇的事情 :给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里去了= =。
结果迁移的时候找了很久,我本地是存在的。但是远程里是没有的。很尴尬。。。和另外一个同事研究了半天才发现。
git remote -v
查看当前的git remote set-url origin [替换的]
git remote add origin_base xxxxx
git push origin_base <branch-name>
这种做法是在另外一个仓库新建了一个分支,不过我想要的是不是新建分支,而是提交到现有的分支里。 push的时候应该可以设定推送到哪个分支吧。
现在我应该可以做git merge的操作就ok了。也达到了一样的效果。
git revert <commit-id>
回退,并且需要push。
git 默认对文件名的大小写不敏感。
这时可以对git进行配置。
git config core.ignorecase false
因为装sourcetree有点麻烦 = =。。。。所以还是直接用git的命令吧= =。 所以记录下(只知道
git clone
= =。。。