git常用指令整理

第一次安装git需要的配置:

1、设置用户名及邮箱
Win+R cmd打开命令行,在命令行中键入 git config --global user.name “想要设置的用户名”
设置邮箱地址 git config --global user.email “邮箱地址”
检查设置的用户名和地址 git config --global --list 然后会显示 user.name= “ ”,user.email=“ ”
2、生成SSH KEY
桌面右击鼠标,点击git bash here 打开git命令行 输入 ssh-keygen -t rsa -C “邮箱地址”回车,提示设置密码,连敲回车即可。

  • 输入 eval “ssh-agent -s”
  • 再输入ssh-add ~/.ssh/id_rsa,再输入你设定的ssh的密码,在输入ssh-add ~/.ssh/id_rsa可能会产生“could not open a connection to your authentication agent”错误 时直接输入:ssh-agent bash,再输入ssh-add ~/.ssh/id_rsa就可以
  • 然后打开vim ~/.ssh/id_rsa.pub 将里面的内容复制下来,打开gitlab 登陆后点击Setting
    将复制的key粘贴进去,就可以完成上传。

Git命令

克隆现有的仓库:
git clone https:/./github.com/libgit2/libgit2 myproject(克隆到本地后的文件夹别名)
忽略一些配置文件:

每次在查询状态等时不需要用的文件 用 .gitignore 命令后面使用通配符来忽略

查看修改内容:

git diff 文件名

添加到暂存区

git add …

提交

git commit…

状态查看:

git status

创建分支:

git branch testing

查看提交历史及各分支所指对象:

git log

分支切换(移动head指针)

git checkout testing

分支合并

git merge testing将testing合并到head所指分支上,任何因包含合并冲突而
有待解决的文件,都会以未合并状态标识出来,等待解决,可以进行手动合并。

分支管理:

git branch 不加参数,会得到当前所有分支的一个列表,并标出head指向。 git branch -v查看每个分支的最后一次提交。–merged查看哪些分支已经合并到当前分支。git
branch -d 删除没有*标志的分支。

同步工作:

git fetch origin 从origin所在服务器中抓取本地没有的数据,更新本地数据库。
拉取数据:git pull 查找当前分支所跟踪的服务器与分支,从服务器上抓取数据然后尝试合并入那个???相当于git fetch命令与git merge命令的合并,git fetch只是把数据拉取下来,而git pull是将数据拉取下来并与当前分支进行合并。

删除远程分支 :

git push origin --delete serverfix从服务器上删除远程分支serverfix

变基操作:

git rebase master 将提交到某一分支上的所有修改都移至另一分支上。注意:只对尚未推送或分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变基操作。
git rebase --onto master server client 取出client分支,找出处于client分支和server分支的共同祖先之后的修改,然后把他们在master分支上重放一遍。

退回上一个版本:

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交的版本,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
在知道版本号的情况下用git reset --hard +版本号 可以回到最新版本。所以穿梭前,用git log查看提交历史,以便确定要回退到哪个版本,防止失误撤销,恢复不了。

暂存工作:

如果当前任务没完成,但有其他任务需要完成,可以将当前分支任务进行保存,使用git stash 保存后当前工作区是干净的,然后新建分支完成新的任务,提交后返回当前分支git checkout dev,但是工作区此时是干净的,需要将暂存的东西进行恢复一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:

多人协作的工作模式

首先,可以试图用git push origin ‘branch-name’推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin ‘branch-name’推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有建立
需要git branch --set-upstream-to ‘branch-name’ origin/‘branch-name’
这就是多人协作的工作模式,一旦熟悉了,就非常简单。

git comit --amend :

在push之前,可以用git commit --amend来进行一些操作
在工作区干净时(所有的文件都被commit),这条命令可以修改上次commit -m 的描述信息。当暂存区有数据时(即有数据刚被add),commit --amend命令可以将暂存区的数据commit到上一次的commit,即把两次提交(一次commit,一次commit --amend)变为一次,同时,也可以修改(commit -m)描述信息。
Commit – amend 不会注意到未被跟踪的文件
注意:在还没push到远程仓库时,本地仓库可以随便commit --amend ,但是push之后,或者是从远程clone下来的仓库中的commit,禁止修改。因为commit --amend会修改commit_id,在push之后修改会导致不可预知的错误。

git checkout 切换分支时的问题

在切换分支时,如果你的工作区是干净的,那么你可以随意的切换分支,但是如果工作区不是干净的,会出现两种问题
你在A分支下有未完成的工作,切换B分支时会将你未提交的工作也带过去,如果在B分支上有提交的话,从A分支带过去的未完成的工作会被提交在B分支
你在A分支下有未完成的工作,切换B分支时会报错,error: Your local changes to the following files would be overwritten by checkout,这是因为底下显示的文件和B分支的文件有冲突产生,禁止合并。
解决方法:
跳转分支之前git status一下查看是不是有没有add和commit的工作,如果有,可以的话,就都提交掉。(事实上尚未add的工作带到了新分支下如果不继续对该文件进行处理,带过去也是没有影响的,大不了跳回来再带回来嘛,反正木有add过的内容在新分支下commit也不会把这部分工作提交。)
使用git stash, 将你修改过的被追踪的文件和暂存的变更保存到一个未完结变更的堆栈中,随时可以继续使用,git stash pop(出栈),git stash apply(将最近的一次保存应用) ,git stash list (显示栈中所有保存), git stash drop(删除最近的一次保存)

git log --oneline --decorate --graph --all

会显示出各分支的详细情况

合并分支

首先找到两个分支的最近祖先,对比当前分支对于祖先的修改并保存为临时文件,在branch中添加临时文件
Rebase在合并的时候可能会产生冲突,有三种方案:
git rebase --abort 取消rebase,返回合并前的状态,两个分支保持不变
git rebase --continue 在解决冲突后,将冲突文件add进暂存区,然后git rebase --continue,成功合并。
git rebase --skip 待补充

修改前几次的commit -m “”中的描述信息(commit --amend只可以修改上次的)

首先用git log找到需要修改的commit的上一次commit的commit_id,使用git rebase -i commit_id命令
现在我们已经回到我们想要修改的commit提交之后的版本,我们可以使用commit --amend修改描述,我们也可以修改文件,重新add,在commit --amend,但是注意可能会有冲突产生,具体见git rebase 合并分支,修改完之后git rebase --continue就可以了
其实并不一定需要git rebase -i 到你想修改的commit 的前面,再往前也是可以,只要让你想修改的commit出现在这里就可以

将两个或多个commit 合并为一个

git rebase -i commit_id,找到所有需要合并的commit

我们找到需要合并的commit,将除过最早提交的commit的pick改为s或squash,如上图,现在需要合并这三个提交,只需将59cb0d0和df04065前面的pick 改为s或squash就行,然后保存:wq退出。

可以修改三次提交的描述信息,也可以新加,在保存:wq退出后,提交已经合并,描述信息为原来的描述和新加的描述,当然你也可以全部删除重写,这个看你具体要求。

常用使用场景

  1. git pull/fetch 拉取代码
  2. git pull --rebase rebase拉取 (在一个被变基然后强制推送的分支上再次执行变基)
  3. git rebase -i [commit-id]进行commit信息的更改、合并、删除等操作
  4. git reset --hard origin/branch-name 远程覆盖本地
  5. git push -f 本地覆盖远程
  6. git cherry-pick [commit-id]将另一个分支commit-id的commit在当前分支再提交一次,生成另一个commit注意:当执行完 cherry-pick 以后,将会生成一个新的提交;这个新的提交的哈希值和原来的不同,但标识名一样;
    git log --graph --pretty=oneline --abbrev-commit查看log
    git branch -m oldName newName 修改本地分支名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值