git常用命令:

  • 四个区域:工作区-->暂存区-->本地仓库-->远程仓库​​​​​​​​​​​​​​

  • 文件状态:

git库所在的文件夹中的文件大致有4种状态

1、Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

2、Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

3、Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

4、Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified。

新建文件--->Untracked

使用add命令将新建的文件加入到暂存区--->Staged

使用commit命令将暂存区的文件提交到本地仓库--->Unmodified

如果对Unmodified状态的文件进行修改---> modified

如果对Unmodified状态的文件进行remove操作--->Untracked

 

  • git init;  

安装完git以后初始化一下,创建仓库;初始化在另一篇里面有

  • git status;    

查看当前仓库信息,被修改的文件显示红色;

  • git add;    

把文件加入暂存区;如果想把当前目录中所有文件都加入暂存区,使用"git add.",会把文件从红色变成绿色;

  • git commmit -m <message>;

提交暂存区的文件,-m是指加上后面的描述<message>,比如git commmit -m "first commit"; 

  • git log;  

commmit以后可以查看提交日志

  • git reset;

把绿色文件变回红色,可以在commit之前使用,相当于git add的反向操作。

  • git reset <commitID>;

git reset <commitID> --hard  不保存所有变更(所有文件都会回退到commitID对应的那个状态)

git reset <commitID> --soft    保留变更并且变更内容处于staged

git reset <commitID> --mixed 保留变更并且变更内容处于modified(如果git reset <commitID>不带参数,默认是mixed)

如果想要回退到某一次的commit,可以通过git log找到提交日志,找到那次的commitID,然后操作:

 

再次使用git log发现第六次提交记录消失了: 

  • git reflog;

查看所有操作记录。比如我们刚才回退到第五次提交,然后log里第六次的就没了。我们又想回到第六次的,可以reflog查看操作记录,然后再回到第六次的。(不过如果是想回到最新的版本,直接git pull就行了)

  • git checkout -b <name> <template>;

创建新的分支;name--新分支名字;template--以哪个分支或commit为模板,如果不填则以当前分支为模板,模板意思就是新分支把当前分支的commit记录复制一遍。
如果template不是本地而是远程仓库需要加个origin:git checkout -b <name> origin <template>

  • git checkout <branchName>;

切换分支,比如git checkout master;

  • git branch;

查看所有分支,只能展示本地的分支,如果我们通过git fetch拉取了远程仓库的新分支,这个命令其实是看不到拉取的新分支,不过我们可以切换过去;

  • git merge <branchName>;

合并分支,也就是把branchName分支和我们当前的分支(一般是master)合并,比如我们合并了一个a分支和一个b分支,合并a的时候只新增了文件1.java,合并b分支时b也写了1.java。这时候需要手动解决冲突,然后add、commit;

  • git fetch:

拉取远程仓库分支到本地仓库。可以用git checkout <branchName>切换拉取到的新分支。

git fetch是将远程主机的最新内容拉到本地仓库,用户在检查了以后决定是否合并到工作本机分支中(想合并的话checkout新分支即可)。
而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

 

  • git rebase:

变基,一般是根据一个分支来改变我们这个分支。

比如我们有个master分支,然后checkout了一个feature分支以后,master、feature都commit了一些操作:

这时如果我们想要合并master、feature的提交,使用rebase的话就会从共同祖先(B这个commit)开始,把当前分支(feature)做的commit复制一份插入master分支,然后删除原来的提交C和D(他们的提交内容一样,但commit id不同。feature自然最后也是指向D’)

git checkout feature
git rebase master
//这两条命令等价于直接git rebase master feature


        上面的例子可抽象为如下实际工作场景:

  1. 张三从B拉了代码进行开发,目前提交了两次,开发到D了;
  2. 李四也从B拉出来开发了并且开发完毕,他提交到了M,然后合到主干上了。
  3. 此时张三想拉下最新代码,于是他在feature分支上执行了git rebase master,即把master分支给rebase过来,由于李四更早开发完并合了主干,如此就相当于张三是基于李四的最新提交M进行的开发了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值