# GIT 多使用者 init 後修改使用者與信箱 筆者的開發環境為Visual Studio與VS Code。 因有個人Github帳號以及公司帳號,常遇到初始化時`user.name`與`user.email`需調整的問題,整理成筆記供後人參考。 ## Visual Studio建立存放庫時預設使用global設定 筆者的Git全域設定預設為使用公司的`user.name`與`user.email`,主要為了避免發生使用個人帳號提交至公司存放庫(千錯萬錯,公司的版控不能錯)。 不論是在Visual Studio、VS Code或者使用Git bash,全域設定的方式都是一樣的,差別只是Visual Studio與VS Code為圖形化介面,而Git Bash需自行打指令。 此處僅列出全域設定的指令操作: 1. 設定全域使用者 ```bash git config --global user.name "GlobalUserName" ``` 2. 設定全域email ```bash git config --global user.email "GlobalUserEmail@gmail.com" ``` ## Visual Studio初始化強迫使用全域設定 情境:在全域設定預設為公司帳號的情境下,如果在Visual Studio寫個人專案,會預設使用全域設定,而本地也因為存放庫尚未建立,因此無法進入選項設定(畢竟沒有`.git`資料夾)。 預設為全域設定。  想修改時,也會因為尚未`git init`,而無法預先設置存放庫設定來覆蓋全域設定。  * 在Visual Studio中建立本機存放庫時,會直接在背景執行`git init`、`git add .`、`git commit`等相關指令,中間可能包含加入`.gitattributes`與`.gitignore`。 * 也就是同時進行了初始化並提交,此時使用「全域」的 `user.name` 與 `user.email` 進行初始化。 Visual Studio使用圖形化介面整套包辦到好,可以說是懶人的救贖,但這也導致中間步驟無法自行設定,這下就困擾了,我不想用全域設定提交啊! ## 想要初始化不使用全域設定該如何做? 有兩種方法: ### 方法一:先`git init`,剩下由Visual Studio自行完成 1.不使用Visual Studio建立存放庫,改直接對資料夾用指令: `git init`。 2.設置存放庫使用的`user.name`與`user.email`: 可以使用指令,沒有 `--global`,代表只對此存放庫設定 ```bash git config user.name "LocalUserName" ``` ```bash git config user.email "LocalUserEmail@gmail.com" ``` 也可在init之後,打開專案於Visual Studio中設定:  3. 在Git檔案加入忽略檔案(`.gitignore`)與屬性檔案(`.gitattributes`),並進行推送。 4. 第一個commit就會是存放庫端的`user.name`與`user.email`。  ### 方法二:直接用Visual Studio來初始化,再來修改使用者 1. 選擇僅限本機直接建立存放庫。  2. 此設置會直接用全域的`user.name`與`user.email`建立初始化相關的commit。  3. 用指令修改已commit的`user.name`與`user.email`。 從第一個commit開始修改: ```bash git rebase -i --root ``` 4. 會進入編輯畫面  5. 輸入`i`在游標位置進入編輯模式,將要更改的 `commit` 的 command 由 `pick` 改成 `e` 或 `edit`。  6. 按下esc儲存並退出編輯模式,`:wq` 關閉互動模式。 此時會回到cmd中,可以開始編輯兩個commit了。 輸入正確的`user.name`與`user.email` ```bash git commit --amend --author="LocalUserName <LocalUserEmail@gmail.com>" ``` 7. 檢查Author已經更改為正確的使用者與信箱,直接`:wq`離開。  8. 使用指令繼續進入下一個commit。 ```bash git rebase --continue ``` 9. 對下一個commit執行一樣操作。 10. 都完成後會顯示訊息: > Successfully rebased and updated refs/heads/master. 11. 在Visual Studio中進行存放庫設定,確保之後不會用全域設定的使用者提交。  ## 結語與補充 * rebase 除了可以用來修改commit的使用者名稱與信箱,也可用來修改commit內容,其中也有不少細微調整的部分,詳細參見:[另一種合併方式(使用 rebase)](https://gitbook.tw/chapters/branch/merge-with-rebase)。 * 以上方法請在推至遠端之前操作,否則推上去後要反悔比較困難(會遇到權限、修改導致歷史錯亂等問題),平常應該養成習慣,commit與push永遠分兩步驟做,以免推錯。 果然人不能太怠惰,平常用圖形化介面太過習慣,會讓自己都忘記如何使用指令進行調整,檢討再檢討。 ## 參考 1. [\[Linux\] vi 與 vim 指令一覽表整理](https://code.yidas.com/linux-vi-vim-command/) 2. [Git 小技巧 - 如何 Rebase 第一個 Commit?](https://blog.darkthread.net/blog/git-rebase-first-commit/) 3. [\[Git\] 修改 git commit 的作者名稱 author name 與 email](https://progressbar.tw/notes/Git/203) 4. [【Git】修改 Git commits 的作者資訊](https://hackmd.io/@CynthiaChuang/Change-the-Git-Commit-Author-for-the-Specific-Commits)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up