放弃修改,强制覆盖本地代码
1 | git fetch --all |
合并单个commit到指定的分支上
1 | git log //查看提交的日志,复制要合并的那个分支的commit id</span> |
合并多个commit到指定的分支上
1 | 1. 基于逆向改变的分支拉出一个分支 |
从O开始
1 | git init |
查看远程仓库地址
1 | git remote -v |
打标签
1 | git tag -a '0.0.1' -m "xxx" |
删除标签
1 | git tag -d 0.0.1 |
git push 403 错误
原因: 本地储存了用户名和密码,重新设置就好了1
git remote set-url origin 用户名@git.coding.xxx.git
Git常用命令
git init
: 初始化一个Git仓库:把某个目录变成Git可以管理的仓库git add test.h
: 把文件test.h添加到仓库git commit -m "添加了test.h文件"
: 把文件提交到仓库。(git commit命令,-m后面输入的是本次提交的说明)git push (origin master(分支名称))
: 推送到远程仓库,其中()里面是可选的git pull (origin master(分支名称))
: 拉取远程仓库最新,其中()里面是可选的git status
: 查看工作区的状态git diff test.h
: 查看test.h文件修改了什么(diff—>difference)git log
: 显示从最近到最远的提交日志。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数git remote add origin git@...
: 关联一个远程库git push -u origin master
: 当远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。git clone git@...
: 克隆git remote
: 要查看远程库的名称git remote -v
: 显示更详细的远程库信息。显示可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址git fetch
: 个人粗浅的理解为将远程所有的分支信息拉取到本地
1
回退与撤销
git reset --hard HEAD^
: 回到上一个版本git reset --hard HEAD^^
: 回到上上个版本git reset --hard HEAD~100
: 回到上100个版本git reset --hard 791c95aa44cc5540d93a146d6d341e5d38936762
: 根据提交的版本号进行版本的回退git reflog
: 查看命令历史,以便确定要回到未来的哪个版本。git checkout -- readme.txt
: 让这个文件回到最近一次git commit或git add时的状态。这里是把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
a. 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
b. 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。git reset HEAD 文件(readme.txt)
:
a. 可以把暂存区的修改撤销掉(unstage),重新放回工作区。若要丢弃工作区的修改,还需要git checkout – readme.txt
b. git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
分支与合并
git branch dev
: 创建一个名称叫dev的分支git checkout dev
: 当前的分支切换为dev分支git checkout -b dev
: 创建一个dev分支,并且切换到dev分支(相当于是是前面两句命令的合并)git branch
: 列出所有分支,当前分支前面会标一个*
号git merge dev
: 把dev分支的工作成果合并到当前分支上, git merge命令用于合并指定分支到当前分支git branch -d dev
: 删除dev分支git branch -D dev
: 若dev分支还没合并到所切出来的分支,则git branch -d dev将不能删除dev分支,可以通过git branch -D dev强行删除dev分支git log --graph
: 查看分支合并图git log --graph --pretty=oneline --abbrev-commit
git merge --no-ff -m "备注的信息" dev
: 将dev分支合并到当前分支的时候强制禁用Fast forward模式
a. 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
b. 合并分支时,加上–no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward 合并就看不出来曾经做过合并。git branch -r
: 查看远程分支git branch -a
: 查看所有分支(会显示本地分支和远程分支)
标签 tag
git tag
: 列出所有 taggit add tag xxxx
: 新建一个taggit push --tags
: 推送tag到远程
git多账号的使用/体验
生成 ssh key
1
2ssh-keygen -t rsa -C "your-email-address1"
ssh-keygen -t rsa -C "your-email-address2"将key添加到ssh agent上
1
ssh-add ~/.ssh/id_rsa ssh-add ~/.ssh/id_rsa_2
配置.ssh/config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21vi .ssh/config
# 加上以下内容
# github
# first.github (first@gmail.com)
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa
# second (second@gmail.com)
Host second
HostName github.com
IdentityFile ~/.ssh/id_rsa_second
# gitOSc
# default git@osc
Host git.oschina.net
HostName git.oschina.net
IdentityFile ~/.ssh/id_rsa
Host second
HostName git.oschina.net
IdentityFile ~/.ssh/id_rsa_work将 id_rsa.pub id_rsa_2.pub添加到对应账号上
验证是否成功
1
2
3
4
5
6//1. Github验证
ssh -T git@github.com
ssh -T git@second
//2. Git Osc验证
ssh -T git@git.oschina.net
ssh -T git@git.second.net(貌似是这个吧,有点忘了)使用账号2clone push
1
2
3
4
5
6git clone... 下来后 修改
// 方法1
git remote rm origin
git remote add origin git@onemaybe:OneMaybe/OneMaybe.github.io.git
// 方法2
vi .git/config