您的位置:首页 > 其它

Git使用中遇到的问题记录

2017-06-03 14:04 239 查看

SSH keys

An SSH key allows you to establish a secure connection between yourcomputer and GitLab.

Before generating an SSH key, check if your system already has one byrunning
cat ~/.ssh/id_rsa.pub
. If you see a long string starting with
ssh-rsa
or
ssh-dsa
, you can skip the ssh-keygen step.

To generate a new SSH key, just open your terminal and use code below. Thessh-keygen command prompts you for a location and filename to store the keypair and for a password. When prompted for the location and filename, youcan press enter to use the default.

It is a best practice to use a password for an SSH key, but it is notrequired and you can skip creating a password by pressing enter. Note thatthe password you choose here can't be altered or retrieved.

ssh-keygen -t rsa -C "XXX@XXX.com"     # XXX is your own account

Use the code below to show your public key.

cat ~/.ssh/id_rsa.pub

Copy-paste the key to the 'My SSH Keys' section under the 'SSH' tab in youruser profile. Please copy the complete key starting with
ssh-
and endingwith your username and host.

Use code below to copy your public key to the clipboard. Depending on yourOS you'll need to use a different command:

Windows:

clip < ~/.ssh/id_rsa.pub

Mac:

pbcopy < ~/.ssh/id_rsa.pub

GNU/Linux (requires xclip):

xclip -sel clip < ~/.ssh/id_rsa.pub


git 查看远程分支、本地分支、创建分支、把分支推到远程repository、删除本地分支

git clone 指定分支:git clone -b <branch> <remote_repo> 例如: git clone -b 指定的分支名字

1 查看远程分支

[plain]
view plain
copy

$ git branch -a  
* br-2.1.2.2  
  master  
  remotes/origin/HEAD -> origin/master  
  remotes/origin/br-2.1.2.1  
  remotes/origin/br-2.1.2.2  
  remotes/origin/br-2.1.3  
  remotes/origin/master  

2 查看本地分支

[plain]
view plain
copy

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
$ git branch  
* br-2.1.2.2  
  master  

3 创建分支

[plain]
view plain
copy

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
$ git branch test  
  
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
$ git branch  
* br-2.1.2.2  
  master  
  test  

线面是把分支推到远程分支 

[plain]
view plain
copy

$ git push origin test  

4 切换分支到test

[plain]
view plain
copy

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
$ git branch  
* br-2.1.2.2  
  master  
  test  
  
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
$ git checkout test  
M       jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java  
M       jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java  
Switched to branch 'test'  
  
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)  
$ git branch  
  br-2.1.2.2  
  master  
* test  

M 表示cong 原来分支(上一次修改没有提交br-2.1.2.2)带过来的修改
5 删除本地分支  
Git branch -d xxxxx

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)

[plain]
view plain
copy

$ git checkout br-2.1.2.2  
M       jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java  
M       jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java  
Switched to branch 'br-2.1.2.2'  
  
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
$ git br  
* br-2.1.2.2  
  master  
  test  
  
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
$ git br -d test  
Deleted branch test (was 17d28d9).  
  
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (br-2.1.2.2)  
$ git br  
* br-2.1.2.2  
  master  

6 查看本地和远程分支  -a。前面带*号的代表你当前工作目录所处的分支

[plain]
view plain
copy

remotes/origin/HEAD -> origin/master #啥意思呢?  

        ”在clone完成之后,Git 会自动为你将此远程仓库命名为origin(origin只相当于一个别名,运行git remote –v或者查看.git/config可以看到origin的含义),并下载其中所有的数据,建立一个指向它的master 分支的指针,我们用(远程仓库名)/(分支名) 这样的形式表示远程分支,所以origin/master指向的是一个remote branch(从那个branch我们clone数据到本地)“

       这个是执行 git remote -v 的结果,看出来origin其实就是远程的git地址的一个别名。

[plain]
view plain
copy

$ git remote  -v  
origin  git@xxxx/jingwei.git (fetch)  
origin  git@xxxx/jingwei.git (push)  

[plain]
view plain
copy

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei (test)  
$ git branch -a  
  br-2.1.2.2  
  master  
* test  
  remotes/origin/HEAD -> origin/master  
  remotes/origin/br-2.1.2.1  
  remotes/origin/br-2.1.2.2  
  remotes/origin/br-2.1.3  
  remotes/origin/master  

7 删除远程版本

[plain]
view plain
copy

git push origin :br-1.0.0  

[plain]
view plain
copy

删除远程分支  
git branch -r -d origin/branch-name  

git push origin :branch-name 


一.查看git提交的历史信息

git log命令显示从最近到最远的提交日志



 

如果嫌输出信息太多,可以试试加上--pretty=oneline参数,代码如下:

 

Java代码  


$ git log --pretty=oneline  

c7b8b201284777366e2cf21d7f104eac123211a8 update add spark  

038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop  

557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop  

 

 


二.版本回退(回退到过去)

第一种:根据head^来确定回退版本

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

参考实例:回退到上一个版本

 

Java代码  


$ git reset --hard HEAD^  

HEAD is now at 038491d update hadoop  

 

 
第二种:根据版本ID来确定回退版本

Java代码  


#查看提交的历史版本信息    

$ git log --pretty=oneline    

c7b8b201284777366e2cf21d7f104eac123211a8 update add spark    

038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop    

557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop    

  

#回退到038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop这个版本</span>    

$ git reset --hard 038491dda6a7982ae02bbb1c85908c4eabf0f639    

HEAD is now at 038491d update hadoop    

    

#再次查看历史记录,发现前面的版本没有了!    

$ git log --pretty=oneline    

038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop    

557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop   

 

 


三.版本回退(回退到未来)

从上个例子中,可以看出来,当使用git reset 回退到过去版本时,那么git log 会看不到当前版本的后面提交信息,怎么办!

答:使用git reflog 可以查看执行命令的历史信息

参考实例:回退到未来

Java代码  


#查看执行的历史命令,前面的那个编号,就是可以选择的版本号  

$ git reflog  

038491d HEAD@{0}: reset: moving to 038491dda6a7982ae02bbb1c85908c4eabf0f639  

c7b8b20 HEAD@{1}: reset: moving to c7b8b20  

557dd6f HEAD@{2}: reset: moving to 557dd6f51ebaf4d7ab2b50e10411701b749d1c8d  

038491d HEAD@{3}: reset: moving to HEAD^  

c7b8b20 HEAD@{4}: commit: update add spark  

038491d HEAD@{5}: commit: update hadoop  

557dd6f HEAD@{6}: commit (initial): add hadoop  

  

#回退到未来  

$ git reset --hard c7b8b20  

HEAD is now at c7b8b20 update add spark  

  

#再次查看提交的历史信息果然又有了3个  

$ git log --pretty=oneline  

c7b8b201284777366e2cf21d7f104eac123211a8 update add spark  

038491dda6a7982ae02bbb1c85908c4eabf0f639 update hadoop  

557dd6f51ebaf4d7ab2b50e10411701b749d1c8d add hadoop  

 

Git:代码冲突常见解决方法

如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,

在发布这个配置文件的时候,会发生代码冲突:

error: Your local changes to the following files would be overwritten by merge:

        protected/config/main.php

Please, commit your changes or stash them before you can merge.

如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:

git stash
git pull
git stash pop


然后可以使用Git diff -w +文件名 来确认代码自动合并的情况.

反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:

git reset --hard
git pull


其中git reset是针对版本,如果想针对文件回退本地修改,使用

[plain] view
plain copy

git checkout HEAD file/to/restore  

git diff  找到不同的文件
git checkout 放弃文件的修改
再pull就没有问题了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: