撰文不易,转载务必注明出处!
文章目录
1.Some frequently instructions
1.git remote -v //查看自己的本地的代码对应远程的仓库
2.git fetch //将远程(original)的代码fetch到本地一个看不见的地方。然后可以进行对比(diff)
3.git diff original/master master //远程的master 和 本地 master进行对比
4.git status
5.git pull // gitpull = git fetch + git merge,将远程的代码拉下来,并合并
- original 是自己创建的远程仓库
- upstream 是自己从别人clone的远程项目地址
6.git branch --set-upstream-to=origin/<branch> master //设置本地分支master跟踪origin的'branch'分支
7.git init --bare 生成一个服务器仓库,和本地仓库的.git是一样的。从本地push的文件在服务器仓库中是看不到的。只有通过如下命令才能看到:git ls-tree master
8.git diff可以对分支、文件等进行比较。
9.git checkout 可以用于检出某个分支、某个commit、某个commit时候的文件
10.git branch -vv 查看本地分支及追踪的分支
11.git push 将本地的分支推到remote, git push -f 强行推//这个命令万不得已不要用
2.remote and local association
- 1.在本地目录下关联远程repository :
git remote add origin git@github.com:git_username/repository_name.git
//origin 可以改成别的名字,一个本地仓库可以和远程多个仓库关联,远程仓库的名字必须是不同的
- 2.取消本地目录下关联的远程库:
git remote remove origin
example
i.从远程develop分支clone到本地文件夹dir,然后git remote remove origin 取消关联。
ii.在远程新建一个空的仓库。将dir文件推到远程仓库 :
git init
git remote add origin git@192.168.1.102:wangyuzhe/Video_Stabilizer_TX2.git
git add .
git commit -m "initial commit"
git push -u origin master
error: src refspec master does not match any.
error: failed to push some refs to 'git@192.168.1.102:wangyuzhe/tracking_libface.git'
因为本地是develop分支。
- 执行
git push -u origin --all
git push -u origin --tags
将本地develop分支推到远程develop分支(如果没有就创建)
- 如果想把本地推到远程master分支上,则需执行
git push -u origin develop:master (u只需第一次加)
3.在GitHub上管理项目
[参考博客]http://www.cnblogs.com/mengdd/p/3447464.html
-
新建repository
- 本地目录下,在命令行里新建一个代码仓库(repository)里面只有一个README.md,命令如下:
touch README.md
git init
- 初始化repository
git add README.md 将README.md加入到缓存区
(可以用git add --a将所有改动提交到缓存(注意是两个杠))
git commit -m "first commit"
提交改变,并且附上提交信息"first commit"
- Push
git remote add origin https://github.com/XXX(username)/YYYY(projectname).git
加上一个remote的地址,名叫origin,地址是github上的地址(Create a new repo就会有。因为Git是分布式的,所以可以有多个remote.
git push -u origin master
将本地内容push到github上的那个地址上去。参数-u,用了参数-u之后,以后就可以直接用不带参数的git pull从之前push到的分支来pull。
此时如果origin的master分支上有一些本地没有的提交,push会失败。
所以解决的办法是, 首先设定本地master的上游分支:
git branch --set-upstream-to=origin/master
或者
git branch --set-upstream-to=origin/master develop //设置本地分支develop跟踪origin/master 远程分支
然后pull:
git pull --rebase
最后再push:
git push
push的方法
- push方法1:
现在如果想直接Push这个develop分支上的内容到github
git push -u origin
如果是新建分支第一次push,会提示:
fatal: The current branch develop has no upstream branch.
To push the current branch and set the remote as upstream, use
输入下面这行命令,
git push --set-upstream origin develop
然后输入用户名和密码,就push成功了。以后的push就只需要输入git push origin
- push方法2:
比如新建了一个叫dev的分支,而github网站上还没有,可以直接:
git push -u origin dev
这样一个新分支就创建好了。
- push方法3:
提交到github的分支有多个,提交时可以用这样的格式:
git push -u origin local:remote
比如:
git push -u origin master:master
表明将本地的master分支(冒号前)push到github的origin的master分支(冒号后)。
如果左边不写为空,将会删除远程的右边分支。
- 分支
新建好的代码库有且仅有一个主分支(master),它是自动建立的。
可以新建分支用于开发:
git branch develop master
新建一个叫develop的分支,基于master分支
切换到这个分支:
git checkout develop
现在可以在这个develop分支上做一些改动,并且提交。
***注意***这两步可以合并成一步,可以新建一个分支develop2,同时切换到这个分支:
git checkout -b develop2 develop
删除分支
git branch可以查看所有的分支
git branch -d develop2 将develop2分支删除
- git clone
Clone
使用git clone+github地址的方法,项目默认只有master分支。git branch也只有master
要看所有的分支:git branch -a或者是git branch -r
这时候要新建一个分支,叫做dev,基于远程的dev分支:git checkout -b dev origin/dev
- git tag
tag
git tag tagname develop
git tag中的两个参数,一个是标签名称,另一个是希望打标签的点develop分支的末梢。
- git merge
合并分支
1.先转到主分支:
git checkout master
2.然后把develop分支merge过来:
git merge --no-ff develop
参数意义:
- 不用参数的默认情况下,是执行快进式合并。
- 使用参数--no-ff,会执行正常合并,在master分支上生成一个新节点。
merge的时候如果遇到冲突,就手动解决,然后重新add,commit即可。
4.git回滚到任意版本
https://www.cnblogs.com/wancy86/p/5848024.html
git回滚到任意版本
先显示提交的log
$ git log -3
commit 4dc08bb8996a6ee02f
Author: Mark <xxx@xx.com>
Date: Wed Sep 7 08:08:53 2016 +0800
xxxxx
commit 9cac9ba76574da2167
Author: xxx<xx@qq.com>
Date: Tue Sep 6 22:18:59 2016 +0800
improved the requst
commit e377f60e28c8b84158
Author: xxx<xxx@qq.com>
Date: Tue Sep 6 14:42:44 2016 +0800
changed the password from empty to max123
回滚到指定的版本
git reset --hard e377f60e28c8b84158
强制提交(一般不用,会强行覆盖远程仓库)
git push -f origin master
5.git clone, push,pull两种方式
1.https:需要每次都输入帐号、密码
1.ssh非对称加密:配好ssh key(ssh-keygen),将public的key贴上去生成key的时候会需要填写passpharse(密码)。如果填写,就需要每次(push、pull)输入这个密码。然后利用ssh agent来省略输入这个密码。
6.git reset
git reset --hard//回退到上一次commit状态,所有没有commit的文件都会被重置
1.touch A.tx
vim A.txt //写入1
git reset --hard//A.txt还在,内容不变,原因是A.txt没有被跟踪(没有add)
2. touch A.tx
vim A.txt //写入1
git add A.txt
git reset --hard//A.txt不在,仓库回到上一次commit状态
3.touch A.tx
vim A.txt //写入1
git add A.txt
git commit -m "commit A.txt"
git reset --hard//A.txt不变,work tree clean。因为“最后一次”commit变成了提交A.txt这次了
git reset --mixed
1.与--hard相同
2.touch A.tx
vim A.txt //写入1
git add A.txt
git reset --mixed//A.txt在,从stage退回到没有跟踪状态。
3.与--hard相同
git reset --soft