Git常用命令使用总结

简介

我们都知道,代码版本管理工具常用的有SVN和Git,如果你两个工具都用过,就会发现Git比SVN实在是好用太多了。Git既可以作为AndroidStudio的插件绑定使用,也有自己的客户端界面操作,还可以使用命令去管理代码。作为AndroidStudio的插件使用时,个人觉得最大的优点是解决冲突特别方便,当然更新提交等其他操作也很方便,修改的代码都一目了然。但是作为一个程序员,我们还是有必要熟悉Git的一些常用的命令,快速解决一些代码管理的问题。

我们可以把Git大致分为以下几个区域

  • 工作区
  • 暂缓区
  • 本地仓库 
  • 远程仓库

常用命令使用和总结

对某个文件夹进行git版本管理,例如D:\gitproject\hxx

在需要管理的项目文件夹下,右键选择"git bash here"

在任意位置右键选择"git bash here",然后通过命令切换文件夹

$ cd D:                  //切换到目标磁盘
$ cd gitproject/hxx      //再切换到目标文件夹下

配置个人用户名和电子邮件,即需要关联的远程仓库的用户名和电子邮件。后面更新、提交代码等操作都是基于次账号。

有"--global"代表本机所有项目git版本管理通用这个用户信息配置;没有"--global"代表只有当前项目使用这个用户信息配置。

$ git config --global user.name "hxx"
$ git config --global user.email "hxx@163.com"

$ git config  user.name "hxx"
$ git config  user.email "hxx@163.com"

若项目是通过http url操作,每次


都需要用户输入用户名和密码,解决办法是第一次clone、pull或push代码时,执行一个命令行,记住密码。

$ git config --global credential.helper store

查看所有的配置

$ git config --list

结果

core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslbackend=openssl
http.sslcainfo=D:/ProgramFile/Git/mingw64/ssl/certs/ca-bundle.crt
credential.helper=manager
user.name=hxx
user.email=hxx@163.com
...

把当前目录变成git本地仓库(创建本地仓库),目录下会多一个.git目录,以后在这个文件目录下写代码Git就能跟踪到变化了

$ git init

查看本地仓库文件的状态,会返回本地仓库的有哪些文件改变了,哪些文件没提交,哪些文件没有追踪到等信息,还会给出下一步操可能需要操作命令的提示。

建议每次对仓库进行操作之前,查看下状态,避免误操作。

$ git status

将本地仓库目录下新创建的某个文件,添加到本地暂存区,例如readme.txt文件

$ git add readme.txt

将本地仓库目录下所有新建的文件都添加到本地暂存区,"."代表所有文件及文件夹,"a"代表"all"

$ git add .

注意:当代码合并后有冲突,文件爆红,根据报错的位置手动解决冲突后,执行$ git add .命令即可恢复绿色,然后按正常流程操作即可

或者

$ git add -a

将本地缓存区的指定文件提交到本地仓库,没有任何提示说明提交成功

$ git commit -m readme.txt

将本地缓存区的所有文件提交到本地仓库,tag是本次的提交说明

$ git commit -m 'tag'

将新建的文件添加到本地缓存区,并提交到本地仓库,

$ git commit -am 'tag'

//相当于下面2行命令的效果

$ git add -a
$ git commit -m 'tag'

如果提交代码后发现有部分错误,又不想git上增加提交记录,修改上一次提交,将两次提交合并为一次提交

git add .
git commit --amend
或修改提交的comment:
git commit --amend -m "提交tag"

如果上次代码已经提交到远程,但是还没有merge到主线,修改提交记录后,可以强制push到远程

git push --force

第一次将本地仓库的代码推到远程仓库的主分支上

$ git push -u origin master

第一次push到远程仓库时,手动输入"yes"需要确认

$ git push -u origin master
The authenticity of host '120.79.37.131 (110.87.97.xxx)' can't be established.
ECDSA key fingerprint is SHA256:xxG3+GGS9LO+cHz2XGDeqVAQ54rfGN1jNSf4U8YRxxx.
Are you sure you want to continue connecting (yes/no)? yes

$ yes

以后推代码,只需要输入下面的命令就可以,意思是将代码push到当前分支上

$ git push 

在本地仓库创建新的分支(实际开发中,创建分支命名规则参考git分支命名规范)

$ git branch branchName

切换到指定的分支

$ git checkout branchName

在本地仓库创建新的分支,并切换到该分支上

$ git checkout –b branchName

本地先开好分支再推送到远程分支,远程分支不存在会自动创建

$  git push origin localBranchName:featureBranchName

远程先开好分支,然后拉到本地本

$  git checkout -b branchName origin/branchName

查看所有分支,当前分支前面会添加一个星号标记

$ git branch -a

合并某分支到当前分支,加入当前所在的是主分支(master),需要把另一个分支(branchName)的代码合并到当前分支

$ git merge branchName

发现你分支提交的代码与主分支代码有冲突,rebase代码,会直接修改git提交的代码,本地提交记录时间都更新成rebase的时间

1. 先保证本地的开发分支和master分支都是最新的code
2. 切换到你现在开发的分支并执行

git rebase master

3. 这样就会把你现在正在开发的分支中已经写好的代码与最新的master分支的代码合并在一起
4. 合并的过程中可能会涉及很多冲突需要解决。
    输入 git status 显示冲突的文件,然后找到那个文件解决冲突。
    解决完冲突后,输入git add [文件名] 或git add .
    然后继续输入 git rebase --continue ,看结果提示rebase是否结束,没有就继续git status开始新一轮的冲突处理,直到所有的冲突全部解决
5:解决完冲突后,推送到远程库。

git push --force

6:rebase 完成
7.rebase操作一半,想把前面解决的所有冲突都会恢复到rebase前的状态,如何终止rebase操作?

 git rebase --abort 

删除本地指定的分支

$ git branch –d branchName

删除远程分支

$ git push origin : remoteBranch
或
$ git push origin --delete remoteBranch
或在github或gitlab等手动删除指定分支

删除远程分支后,本地需要与远程同步分支,有以下几种方式

1.在本地通过命令删除远程分支,同一个用户同步远程分支,使用命令如下,同步之后可以同步远程仓库分支的变化(新建、删除分支等变动),但只同步远程分支,不会拉代码

$ git fetch

如果需要同步分支并且拉代码到本地(将远程主机的master分支的代码拉到本地branchName分支上,但是没有合并代码),这行命令一般不单独用,配合merge一起使用,合并代码,效果和git pull一样。

$ git fetch origin master branchName
$ git merge branchName

2.如果是手动在github上删除远程分支或者其他用户删除的远程分支,使用上面的命令貌似不管用,这时有两种解决方法

$ git fetch -p

$ git remote show origin
$ git remote prune origin  //git bash有提示

看截图

上面两种都可以完成同步远程分支,然后可以用git branch -a查看分支情况


将远程仓库的项目(假设远程仓库的git地址是:git@hxx/android-hxx.git),下载到本地仓库(本地什么都没有)。

先在本地新建一个放项目的文件夹,然后右键打开git bash(git命令框),输入命令行:

$ git clone git@hxx/android-hxx.git

查看git版本管理的日志,里面包含所有版本commit的记录。

$ git log

结果示例

commit 89e48b86a6007dd77c8d711be1645ggef1746e66 (HEAD -> master, origin/master)
Author: hxx <hxx@163.com>
Date:   Tue Sep 17 17:27:06 2019 +0800

    去掉多余import

commit 869ecd785df3e2tfe4a642bcbcb628dff092rr11
Author: hxx <hxx@163.com>
Date:   Tue Sep 17 16:09:55 2019 +0800

    Init hxx project

commit后面跟的一串字符,是commit的唯一Id。

注意:退出git log需要在英文输入状态下按Q键


git本地仓库版本回退
回退到上一个版本

不保留commit的代码
$ git reset --hard HEAD^

保留commit的代码
$ git reset --soft HEAD^

回退到上上个版本

不保留commit的代码
$ git reset --hard HEAD^^

保留commit的代码
$ git reset --soft HEAD^^

重点引入补充:撤销commit提交详细操作总结

查看git log,根据commit的唯一Id回退到指定版本(只是工作区的代码回退了,仓库的和远程的没变,需要commit和push)

不保留commit的代码
$ git reset --hard 869ecd785df3e2tfe4a642bcbcb628dff092rr11

保留commit的代码
$ git reset --soft 869ecd785df3e2tfe4a642bcbcb628dff092rr11

git add . 后如果有不想提交的文件,比如build文件夹,如何撤销操作

全部撤销:git reset HEAD

撤销某个文件:git reset HEAD filename

撤销某个文件夹:git reset HEAD dirfile

创建本地仓库和远程仓库后,我们还需要将本地仓库与远程仓库进行关联,才能本地和远程关联管理项目。

$ git remote add origin git@hxx/android-hxx.git

查看本地仓库关联的远程仓库

$ git remote -v
结果:
origin  git@hxx/android-hxx.git (fetch)
origin  git@hxx/android-hxx.git (push)

本地仓库关联另一个远程仓库。例如,我本地仓库目前只关联了git仓库,还想同时关联公司的gitlab平台的仓库

 $ git remote add gitlab git@hxx/android-hxx.git

再次查看所关联的远程仓库

 gitlab  git@hxx/android-hxx.git (fetch)
 gitlab  git@hxx/android-hxx.git (push)
 origin  git@hxx/android-hxx.git (fetch)
 origin  git@hxx/android-hxx.git (push)

将远程仓库(主机名=origin,分支=master)的代码拉到本地仓库,并与当前分支合并

$ git pull origin master

当然,也可以指定与本地仓库的某个分支合并

$ git pull origin master branchName

暂存当前未开发完成的代码,很实用

当新功能的代码写到一半,甚至还有报错,突然线上有紧急bug需要修复,需要在其他分支上修改代码。这时由于当前分支代码变动但是未提交(功能不完整或者报错,最好不要直接提交代码),无法直接切换到目标分支,解决的办法就是

1.把代码暂时锁定在当前分支的本地缓存区

$ git stash

2.锁定完成后就可以切换到其他分支修改代码了,结束后随时再切回原来开发的分支(开发到一半的代码还看不到),然后解除代码本地锁定(开发到一半的代码可见了),继续未完成的代码开发
 

$ git stash pop

最后,再记录下在关联git之前,我们需要设置忽略文件,我的习惯是直接修改项目的gitignore文件,

项目最外层的.gitignore文件的配置(可以根据自己的需求配置)

*.iml
.gradle
.idea
/local.properties
/build
/debug
/release
.DS_Store
/captures
.externalNativeBuild

然后再关联git就可以了。


Git-LFS

根据电脑型号,下载对应的LFS,以intel的MAC笔记本为例,下载Mac - Intel Silicon版本的ZIP

提示:​第1步执行./install.sh命令时,如果报错install: /usr/local/bin/git-lfs: Permission denied

说明没有修改/usr/local/bin目录的权限,请尝试修改它的访问权限

$ sudo chmod -R 777 /usr/local/bin/

如果无法修改,查看csrutil status,如果是enable,尝试关闭SIP【csrutil disable终端命令】

如果执行命令后,提示Git LFS initialized.说明git-lfs安装成功,

然后再执行git lfs install,提示Updated Git hooks.Git LFS initialized.说明成功了。

 1. Setup Git LFS on your system. You only have to do this once per
    repository per machine:
    (在下载zip的解压后文件夹下找到install.sh,执行脚本即可:mac在当前文件夹下打开终端,输入./install.sh)安装后,只有执行一次以下命令


        git lfs install

 2. Choose the type of files you want to track, for examples all ISO
    images, with git lfs track:
    在本地项目目录下,过滤需要跟踪的大文件,可以是具体的文件名,也可以支持正则写法

        git lfs track "*.iso"

 3.查看有哪些文件加入跟踪,大文件是否加入lfs跟踪成功,没有再执行4
   
    git lfs track


 4. The above stores this information in gitattributes(5) files, so
    that file need to be added to the repository:
    手动将上面的过滤文件加入跟踪

        git add .gitattributes

 5. Commit, push and work with the files normally:
    最后正常的执行和add,commit,push等操作就可以

        git add file.iso
        git commit -m "Add disk image"
        git push
要实现免密跳转到Gitlab,你可以采用以下步骤: 1. 首先,使用账号密码登录Gitlab并拉取项目。这是为了确保你已经成功地与Gitlab建立了连接,并且可以正常拉取代码。 2. 为了方便团队成员拉取代码而不必频繁输入账号和密码,你可以使用RSA加密算法生成一对秘钥。秘钥包括公钥和私钥,其中公钥将会被配置到Gitlab服务端。 3. 在你的计算机上安装Git客户端。你可以从Git官方网站下载并安装最新版本的Git客户端。 4. 打开命令行终端,并定位到你的用户主目录下的.ssh文件夹。这个文件夹通常位于C:\Users\你的用户名\.ssh。你可以使用cd命令命令行中切换到.ssh文件夹的目录。 5. 在Gitlab服务端配置公钥。首先,找到你生成的公钥文件(通常是以.pub为后缀的文件)。然后,将公钥的内容复制到剪贴板中。 6. 登录到Gitlab账号,并找到账号设置中的SSH密钥配置项。在这里,你可以添加新的SSH密钥。 7. 将你复制到剪贴板的公钥内容粘贴到Gitlab的SSH密钥配置项中,并保存更改。 现在,你已经成功地配置了免密跳转到Gitlab。在你的Git客户端中,你可以使用git clone命令来克隆Gitlab上的项目,并且无需再输入账号和密码了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Gitlab——(四) 配置SSH免密登录](https://blog.csdn.net/zhanshixiang/article/details/104286992)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值